有两种使用 Django Auth LDAP 对用户进行身份验证的方法
- 搜索/绑定和
- 直接绑定。
第一个涉及匿名或使用固定帐户连接到 LDAP 服务器并搜索身份验证用户的可分辨名称。然后我们可以尝试再次与用户的密码绑定。
第二种方法是从用户的用户名中导出用户的 DN,并尝试直接绑定为用户。
我希望能够使用尝试访问应用程序的用户的用户 ID (sAMAccountName) 和密码进行直接绑定。请让我知道是否有办法实现这一目标?目前,由于下面解释的问题,我似乎无法完成这项工作。
就我而言,LDAP 中用户的 DN 格式如下
**'CN=Steven Jones,OU=Users,OU=Central,OU=US,DC=client,DC=corp'**
这基本上转换为“CN=FirstName LastName,OU=Users,OU=Central,OU=US,DC=client,DC=corp”
这阻止我使用直接绑定,因为用户的sAMAccountName是sjones,这是与用户名 (%user) 对应的参数,我无法找到一种方法来构建正确的AUTH_LDAP_USER_DN_TEMPLATE以派生用户的 DN使用。
由于上面解释的问题,我现在正在使用搜索/绑定,但这需要我在AUTH_LDAP_BIND_DN和AUTH_LDAP_BIND_PASSWORD中指定一个固定的用户凭据。
这是我当前的settings.py配置
AUTH_LDAP_SERVER_URI = "ldap://10.5.120.161:389"
AUTH_LDAP_BIND_DN='CN=Steven Jones,OU=Users,OU=Central,OU=US,DC=client,DC=corp'
AUTH_LDAP_BIND_PASSWORD='fga.1234'
#AUTH_LDAP_USER_DN_TEMPLATE = 'CN=%(user)s,OU=Appl Groups,OU=Central,OU=US,DC=client,DC=corp'
AUTH_LDAP_USER_SEARCH = LDAPSearchUnion(
LDAPSearch("OU=Users, OU=Central,OU=US,DC=client,DC=corp",ldap.SCOPE_SUBTREE, "(sAMAccountName=%(user)s)"),
LDAPSearch("OU=Users,OU=Regional,OU=Locales,OU=US,DC=client,DC=corp",ldap.SCOPE_SUBTREE, "(sAMAccountName=%(user)s)"),
)
AUTH_LDAP_USER_ATTR_MAP = {"first_name": "givenName", "last_name": "sn","email":"mail"}
AUTH_LDAP_GROUP_SEARCH = LDAPSearch("CN=GG_BusinessApp_US,OU=Appl Groups,OU=Central,OU=US,DC=client,DC=corp",ldap.SCOPE_SUBTREE, "(objectClass=groupOfNames)")
AUTH_LDAP_GROUP_TYPE = GroupOfNamesType()
AUTH_LDAP_REQUIRE_GROUP = 'CN=GG_BusinessApp_US,OU=Appl Groups,OU=Central,OU=US,DC=client,DC=corp'
期待这里的好人的一些指导。