我们使用 Apache 2.2 对 Active Directory 进行身份验证。配置如下:
AuthFormLDAPURL "ldap://*.*.*.*:389/DC=domain,DC=com?userPrincipalName,sAMAccountName?sub?(objectClass=*)"
注意:以下所有跟踪均使用 WireShark。
当 CN 等于 sAMAcountMame 名称时,我定义了用户 john:
我只能使用 john (sAMAcountMame) 进行身份验证。请在下面找到 LDAP 绑定请求:
LDAP 绑定响应:
然后当 CN 不等于 sAMAcountMame 名称时,我定义了用户 johnd:
不幸的是,我无法使用 johnd (sAMAcountMame) 进行身份验证。请在下面找到 LDAP 绑定请求:
LDAP 绑定响应:
我可以使用全名 [email protected] 进行身份验证。请在下面找到 LDAP 绑定请求:
LDAP 绑定响应:
问题:
- 当 CN 不等于 sAMAcountMame 时,为什么我无法使用 sAMAcountMame 进行身份验证?
- 在这种情况下,为什么我可以在域中使用 sAMAcountMame 进行身份验证?
- 我们是否应该建议我们的用户始终在域中使用 sAMAcountMame 进行身份验证以防止身份验证问题?
谢谢你的帮助!
执行 LDAP 简单绑定时,AD 不会尝试将传递的名称与
sAMAccountName
不带任何后缀的属性进行匹配。但是,它可以尝试找到与 的匹配displayName
项,这在第一个测试中对您有用(它看起来像与 的匹配sAMAccountName
项,因为这些属性的值相同)。处理 LDAP 简单绑定时使用的名称匹配规则的精确描述可以在 Microsoft 文档中找到:http: //msdn.microsoft.com/en-us/library/cc223499.aspx
使用 UPN 可能更可靠,因为
displayName
可能包含一些人类可读的字符串(例如,一个人的全名)并且不能保证是唯一的。DOMAIN\USERNAME 形式也应该是唯一的,但取决于现在被认为已过时的 NetBIOS 域名。