使用Django实现单点登录(SSO)

64

我想使用Django为我们目前使用的多个应用程序实现单点登录(SSO)。如何使用Django实现这一功能?


你是否已经在其他应用程序中使用SSO机制?它们也是Django应用程序吗?(如果是,它们是否托管在同一域上) - AndiDog
8个回答

15

14

MamaCAS似乎是一个不错的解决方案。(截至撰写本文时已获得104个星标。)

https://github.com/jbittel/django-mama-cas

MamaCAS是一个Django中央认证服务(CAS)单点登录和单点注销服务器。它实现了CAS 1.0、2.0和3.0协议,包括一些可选功能。

CAS是一个单点登录和单点注销Web协议,允许用户在提供一次凭据后访问多个应用程序。它利用安全票证,这是由服务器生成和验证的唯一文本字符串,允许应用程序在没有直接访问用户凭据(通常是用户ID和密码)的情况下对用户进行身份验证。


12

29
此时使用多年未更新的身份验证库似乎不是一个好主意,因为每年都会发现新的漏洞,而且随着Django推出新版本,事情也会变得越来越复杂。 - B Robster
django-mama-cas是一个新鲜且维护良好的项目。https://dev59.com/n2445IYBdhLWcg3w3N2z#36539275 - nu everest
1
我认为django-mama-cas现在已经不再活跃了。自上次提交以来已经过去了将近9个月,问题也一直悬而未决。看起来https://github.com/onelogin/python3-saml/正在得到维护。 - Nautatava Navlakha

9

django-sso 是一个相当不错的技术包,它实现了单点登录。


7

给定的链接无法使用... - shiv shankar keshari

3

我使用了https://github.com/onelogin/python3-saml与Azure AD和Google进行集成 - 这个工具的设置非常简单,文档和支持也很好。

“Original Answer”翻译成中文是“最初的回答”。


3

3

CAS(Central Authentication Service)是一个很好的解决方案,支持Django和Flask的SSO(单点登录)和单点注销(SLO)。以下是设置指南,以拥有CAS服务器和多个具有相同登录/注销的客户端:

  1. 需要一个CAS-Client,我使用了称为django-cas-ng package的Django-CAS新一代,并使用此处是其配置来创建自己的客户端。(另外,这里是一个预配置的客户端repo
  2. 需要一个CAS-Server,我使用了一个预配置的repo

[注意]:

  • 它支持 Django 1.11、2.x、3.x

[更新]:

  • 值得一提的是,为了避免登录/注销时的冲突,您需要更改默认客户端的SESSION_COOKIE_NAME以创建可区分的会话。在Django中,您需要为每个Django客户端在settings.py文件中添加以下行:
SESSION_COOKIE_NAME = 'client1_sess'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接