django sso提供程序应用程序

dj-sso-server2的Python项目详细描述


dj-sso-server是一个django应用程序,它为您的项目提供单点登录功能。

dj-sso-server应用程序用作sso提供程序,您可以在其他需要sso的项目中使用dj-sso-clienthttps://github.com/tofu0913/dj-sso-client)作为sso客户端

安装

通过命令pip install dj-sso-server

安装

依赖包dj-api-authhttps://github.com/feifangit/dj-api-auth)将自动安装。

工作原理

  • 基于dj-api-auth模块,我们可以创建一个最初包含sso相关api的api密钥。dj-sso-serverdj-sso-client之间的所有api通信都受dj-api-auth

    保护。
  • api密钥还将与host绑定,后者用于限制sso请求的来源。

  • 使用dj-sso-client

    的SSO工作流程
    1. Firstly, ^{tt3}$ applies a request key via API ^{tt12}$ on ^{tt1}$

    2. The request key in ^{tt1}$ side will be kept in cache for 5 minutes, so the whole SSO login process should be done in 5 minutes.

    3. With the request key, ^{tt3}$ redirects user to SSO login page on SSO provider, and get auth token if login success. ^{tt1}$ will

      • verify the request origin
      • verify request key validity (expired?)
      • save user information in cache
    4. dj-sso-client通过apiauthtoken/使用dj-sso-server验证auth令牌,并获取SSOUser对象。

    5. dj-sso-server调用authtoken/后,从缓存中删除请求键

  • 如果在dj-sso-server上有一个已登录的帐户(例如,放置sso提供程序的项目也提供了其他功能,并且浏览器端有一个有效的cookies,服务器端有一个有效的会话),则用户可以选择继续使用该已登录的帐户。

  • 通过dj-sso-server进行SSO登录,不影响dj-sso-server上的登录状态。

注意

因为请求键存储在缓存中,等待验证或过期。如果在部署中运行多个应用程序进程(Gunicorn等),请使用可以在进程之间共享的适当缓存系统。

memcached和redis都非常适合缓存,请注意,本地内存缓存django.core.cache.backends.locmem.LocMemCache)是本地调试的玩具。

dj-sso-server添加到项目

  1. djapiauthdjssoserver添加到sttings.py
  2. 为模块分配URL
# add auth for a browser-oriented viewurl(r'^sso/',include("djssoserver.urls"))#...

设置

  • sso_server_user_to_json_func
    • 可选,函数的路径接收用户对象并返回json字符串。

    • 默认的SSO_SERVER_USER_TO_JSON_FUNC函数是djssoserver.utility.default_user_to_json

      defdefault_user_to_json(user):returnjson.dumps(model_to_dict(user,exclude=["password","user_permissions"]),cls=DjangoJSONEncoder)

扫描API

为了发现和管理api,在可访问的urls.py中添加dj-sso-server之后,运行命令python manage.py reloadentrypoints将api收集到数据库。

为SSO创建API密钥

  1. 从您的管理站点,在Single sign-on/SSO credential创建一个api密钥。所有与SSO相关的API将自动分配给此API密钥。
  2. 在sso的api密钥准备好之后,您可以在管理站点的API Auth/Credential为这个api密钥分配更多的api

自定义SSO登录页

您可以将样式添加到自己的SSO登录页。只需在templates文件夹下创建djsso/ssologin.html。通过模仿 original page

ssouser对象

dj-sso-client获取一个SSOUser对象,无论sso提供程序项目中使用的用户模型是什么。

详见dj-sso-clienthttps://github.com/tofu0913/dj-sso-client)自述文件

演示

我们在heroku(https://dj-sso-sample.herokuapp.com/)上运行了一个sso提供程序应用程序。

源代码:在example文件夹下

要尝试演示,请查看dj-sso-clienthttps://github.com/tofu0913/dj-sso-client)的自述文件

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
将Displaytag与spring web mvc集成所需的java帮助   java通过鼠标点击添加/删除   java替代方案可用于通用2d数组,无需使用抑制警告   使用Jackson的BeanPropertyFilter的java筛选器对象列表   spring不需要在java接口上导入就可以获得bean吗?   java Jcabi Github例外初始化错误   swing Java BoxLayout使用全宽   性能在Scala中,JavaEE规范的实现能否更高效?   Java使用printf动态填充左侧   java如何使用ctrl+shift并单击Jtable避免选择   Java Spring(LinkedHash)映射中的枚举键未排序   java如何在spark数据集中保存嵌套或JSON对象并转换为RDD?   将XML数据类型作为输入从Java传递到DB2存储过程   通知中未识别java AspectJ intertype字段   java如何在通知读者文件名应以后缀结尾后,将文件名作为字符串变量读取。txt?   java如何使用Spring boot创建pdf文件和发送电子邮件   java为什么不能在数组类型int[][]上调用此方法