使用Django Rest Framework实现单点登录

11
我们有两个应用程序 App1 ,其域名为 www.app1.com App2 ,其域名为 www.app2.com 。这两个应用程序的后端都是基于 django-rest-framework 的api。在前端方面,我们正在使用 Angular2 。这两个应用程序具有不同的用户群,但现在我们决定合并用户群,并希望使用单个身份验证服务。
这两个应用程序需要使用彼此的功能。我们希望用户获得无缝体验。如果用户从一个应用程序登录,则应该不会从其他应用程序登录。
我进行了一些研究,并发现可以通过 SSO 实现。以下是相关的stackoverflow问题的链接(使用django实现SSO)。我还发现了许多库。它们中的大多数都非常古老,因此不能使用遗留代码。
以下是我尝试过的库以及为什么无法适应我的问题。
  1. 使用 django-mama-cas 作为服务器,使用 django-cas-ng 作为客户端。这个可以完美地解决基于会话的应用程序问题,但我的客户端应用程序是基于rest-api的。
  2. 另一个是 django-rest-framework-sso 。这是一年前的库,我也不确定如何在Angular应用程序之间确保 jwt
所以你能否分享如何使用 rest-fraemwork 实现 SSO

使用单个Django安装即可为两个应用程序提供动力,它将正常工作,您不需要额外的库。 - Goran
1个回答

2
你可以做的是使用django-rest-auth项目https://github.com/Tivix/django-rest-auth,将其作为中央认证服务器在app-3上运行,并从app-1和app-2调用它进行身份验证。
这将要求您整合用户数据库并从一个restful auth服务中提供它。然而,您仍需要编写一个restful cas客户端来处理身份验证,或者您可以重新使用ng-cas代码。它所做的就是接收mama-cas服务器返回的ServiceTicket,并基于此在django auth中创建会话,可选地在客户端服务器数据库中创建用户存根。
另一种选择是使mama-cas具有休息功能。 mama cas所做的就是在成功登录时创建一个ServiceTicket模型对象,并将其发送到消耗“service”和“ticket”参数并创建身份验证会话的客户端。无论您是否具有restful,都会创建身份验证会话,这是django架构提供身份验证的一部分。
我们在Likalo所做的是采取django-mama-cas服务器并使其半休息。我的路线图是使用此方法使其100%休息。
希望这有所帮助...

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