我需要在 Django 应用程序中使用 Active Directory 联合身份验证服务 (ADFS) 身份验证。我将创建一个身份验证后端,但是有人会推荐我使用哪个工具来使其尽可能快,或者从头开始实施身份验证会更好吗?
我从微软网站上阅读了一些文章,并检查了:
但是,尽管它们解释了一些关于 ADFS 和 SSO 的核心概念和想法,但在我看来,这些示例更侧重于 .NET 堆栈。
我需要在 Django 应用程序中使用 Active Directory 联合身份验证服务 (ADFS) 身份验证。我将创建一个身份验证后端,但是有人会推荐我使用哪个工具来使其尽可能快,或者从头开始实施身份验证会更好吗?
我从微软网站上阅读了一些文章,并检查了:
但是,尽管它们解释了一些关于 ADFS 和 SSO 的核心概念和想法,但在我看来,这些示例更侧重于 .NET 堆栈。
在 .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 执行此操作。
这里有一个可用的包:http: //django-auth-adfs.readthedocs.org/en/latest/