首页 文章

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

提问于
浏览
7

我使用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/)完成,但文档说:"where the Web server sets the REMOTE_USER environment variable" . 假设Django站点和认证服务器在同一台服务器上,不是吗?

在我的例子中,Django站点在Linux Apache服务器上运行,而Active Directory在另一台Windows机器上运行(实际上我们使用2个不同的AD服务器来记录人员),所以我不知道REMOTE_USER env变量将如何组 .

用户都使用Windows机器 .

2 回答

  • 1

    因此,神奇的词是kerberos认证 .

    您的用户不会针对您的django应用程序进行身份验证,而是针对您的网络服您的Intranet可能正在运行kerberos服务,它会为您验证您的用户身份,如果经过身份验证,则只需在REMOTE_USER中为您提供用户名 .

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

    这是CentOS的一篇简短文章 . 你的环境看起来非常重要,所以我所做的就是向你展示方向;-)

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

  • 0

    而不是Kerebos,只需使用LDAP:

    • 启用mod_ldapmod_authnz_ldap

    • 请您的网络管理员创建一个可以访问搜索Active Directory的服务帐户,然后获取"Distinguished Name"和密码来绑定服务帐户

    • 将以下行添加到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将处理身份验证,您的登录将如下所示:

    Apache LDAP auth dialog

    如需更详细的解答,请阅读this post on my blog

相关问题