通过远程Active Directory单点登录到Django站点

我为使用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服务器上,另一台Windows计算机上运行Active Directory(实际上有两台不同的AD服务器用于登录人员),所以我不知道REMOTE_USER env变量如何被设置。

用户都使用Windows机器。


这里的魔术字是kerberos认证。

您的用户不会针对您的django应用程序进行身份验证,而是针对您的web服务器进行身份验 您的Intranet可能有一个kerberos服务正在运行,它会为您验证您的用户,并在REMOTE_USER中为您提供用户名,前提是他已通过身份验证。

然后,您可以在LDAP中搜索特定的访问权限,或者拥有一个拥有特殊访问权限的自己的数据库

这里是CentOS的一篇短文。 你的环境看起来很重要,所以我只能向你展示方向;-)

http://wiki.centos.org/HowTos/HttpKerberosAuth


而不是Kerebos,只需使用LDAP:

  • 启用mod_ldapmod_authz_ldap
  • 请您的网络管理员创建一个有权限搜索Active Directory的服务帐户,然后获取“专有名称”和密码以绑定服务帐户
  • httpd.conf添加到您的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>
    
  • 按照Django文档并将RemoteUserMiddlewareRemoteUserBackend添加到AUTHENTICATION_BACKENDS
  • 请注意,启用LDAP后,身份验证将由Apache处理,您的登录如下所示:

    Apache LDAP认证对话框

    有关更详细的答案,请在我的博客上阅读这篇文章

    链接地址: http://www.djcxy.com/p/33761.html

    上一篇: Single sign on to Django site via remote Active Directory

    下一篇: LDAP authentication