我使用Django为客户开发了一个Intranet。用户通过Active Directory登录其计算机。目前,我通过标准Django contrib.auth登录,并通过自定义登录后端使用Active Directory。
我希望用户能够通过现有的Active Directory登录使用SSO自动登录Django站点。
我知道这应该通过REMOTE_USER(https://docs.djangoproject.com/en/dev/howto/auth-remote-user/)完成,但文档说:“Web服务器设置REMOTE_USER环境变量的地方”。这假设Django站点和认证服务器在同一台服务器上,不是吗?
在我的情况下,Django站点在Linux + Apache服务器上运行,而Active Directory在另一台Windows机器上运行(实际上我们使用两台不同的AD服务器来记录人员),所以我不知道REMOTE_USER是怎么回事将设置env变量。
用户都在使用Windows机器。
答案 0 :(得分:1)
之前的神奇词是kerberos身份验证。
您的用户不会针对您的django应用程序进行身份验证,而是针对您的网络服务器。您的Intranet可能正在运行kerberos服务,它会为您验证用户身份,如果经过身份验证,则只需在REMOTE_USER中为您提供用户名。
然后,您可以在LDAP中搜索特定的访问权限,或者拥有一个拥有特殊访问权限的自己的数据库。
这是CentOS的一篇简短文章。你的环境看起来非常重要,所以我所做的就是向你展示方向; - )
答案 1 :(得分:0)
而不是Kerebos,只需使用LDAP:
mod_ldap
和mod_authnz_ldap
将以下行添加到httpd.conf
<Location />
AuthName "Please enter your SSO credentials."
AuthBasicProvider ldap
AuthType basic
AuthLDAPUrl "ldap://my.activedirectory.com:389/OU=Offices,DC=activedirectory,DC=com?sAMAccountName"
AuthLDAPBindDN "CN=binding_account,OU=Administrators,DC=activedirectory,DC=com"
AuthLDAPBindPassword <binding password>
AuthLDAPBindAuthoritative off
LDAPReferrals off
Require valid-user
</Location>
注意,启用LDAP后,Apache将处理身份验证,您的登录将如下所示:
如需更详细的解答,请阅读this post on my blog