使用 Apache 进行 Active Directory 身份验证:为什么我需要使用全名(域中的用户)?

使用 Apache 进行 Active Directory 身份验证:为什么我需要使用全名(域中的用户)?

我们使用 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 绑定响应:

在此处输入图片描述

问题:

  1. 当 CN 不等于 sAMAcountMame 时,为什么我无法使用 sAMAcountMame 进行身份验证?
  2. 为什么在这种情况下我可以在域中使用 sAMAcountMame 进行身份验证?
  3. 我们是否应该建议用户始终使用域中的 sAMAcountMame 进行身份验证以防止出现身份验证问题?

感谢您的帮助!

答案1

执行 LDAP 简单绑定时,AD 不会尝试将传递的名称与sAMAccountName不带任何后缀的属性进行匹配。但是,它可以尝试找到与 的匹配displayName,这在第一个测试中对您有用(它看起来像与 的匹配sAMAccountName,因为这些属性的值相同)。

处理 LDAP 简单绑定时使用的名称匹配规则的精确描述可以在 Microsoft 文档中找到: http://msdn.microsoft.com/en-us/library/cc223499.aspx

使用 UPN 可能更可靠,因为displayName它可能包含一些人类可读的字符串(例如,一个人的全名)并且不能保证是唯一的。DOMAIN\USERNAME 格式也应该是唯一的,但取决于 NetBIOS 域名,而 NetBIOS 域名现在被认为已经过时了。

相关内容