我们使用 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 绑定响应:
我可以使用全名进行身份验证[电子邮件保护]。请查看以下 LDAP 绑定请求:
LDAP 绑定响应:
问题:
- 当 CN 不等于 sAMAcountMame 时,为什么我无法使用 sAMAcountMame 进行身份验证?
- 为什么在这种情况下我可以在域中使用 sAMAcountMame 进行身份验证?
- 我们是否应该建议用户始终使用域中的 sAMAcountMame 进行身份验证以防止出现身份验证问题?
感谢您的帮助!
答案1
执行 LDAP 简单绑定时,AD 不会尝试将传递的名称与sAMAccountName
不带任何后缀的属性进行匹配。但是,它可以尝试找到与 的匹配displayName
,这在第一个测试中对您有用(它看起来像与 的匹配sAMAccountName
,因为这些属性的值相同)。
处理 LDAP 简单绑定时使用的名称匹配规则的精确描述可以在 Microsoft 文档中找到: http://msdn.microsoft.com/en-us/library/cc223499.aspx
使用 UPN 可能更可靠,因为displayName
它可能包含一些人类可读的字符串(例如,一个人的全名)并且不能保证是唯一的。DOMAIN\USERNAME 格式也应该是唯一的,但取决于 NetBIOS 域名,而 NetBIOS 域名现在被认为已经过时了。