我需要在Django应用程序中使用Active Directory联合身份验证服务(ADFS)身份验证。我将创建一个身份验证后端,但有人会建议我使用哪个工具尽可能快地实现它,或者从头开始实现身份验证会更好吗?
我已阅读微软网站上的一些文章,并检查过:
但即使他们解释了一些关于ADFS和SSO的核心概念和想法,我认为这些例子更多地集中在.NET堆栈上。
答案 0 :(得分:6)
在.NET中编写基本客户端并嗅探流量将为您提供在任何技术中实际实施流程的所有必要线索。
基本上,您的django应用程序有一个端点,adfs用于返回。您在adfs中注册了端点(例如https://myapp.com/authgateway)。
然后,您的应用程序通过重定向到https://adfs.address/adfs/ls?wa=wsignin1.0&wtrealm=https://myapp.com/authgateway
来初始化流程Adfs选择请求并验证凭据。然后,它会创建一个SAML令牌,并使用包含令牌的POST请求重定向回您的应用程序。
然后是困难部分,SAML令牌是一个普通的xml,可用于建立本地用户会话。其中一个声明包含adfs提供的用户名,其他声明可以包含角色,电子邮件,以及您在adfs端配置的任何内容。
但是,为防止伪造,您需要验证令牌。验证包括检查XMLdsig签名并验证签名证书指纹是否与adfs签名证书的指纹匹配。根据您对x509证书和xml验证的了解程度,这可能很容易或很困难。尝试在django社区中找到任何支持。
无论如何,正如您所看到的,基本流程很简单,只需要两个重定向,从应用程序到adfs的302,以及从adfs到应用程序的POST。虽然我们每天都在.net中执行此操作,但我们的合作伙伴在我们的指导下在php / java中执行此操作。
答案 1 :(得分:2)