使用Apache的Active Directory身份validation:为什么我需要使用全名(域用户)?

我们使用Apache 2.2对Active Directory进行身份validation。 configuration如下:

AuthFormLDAPURL "ldap://*.*.*.*:389/DC=domain,DC=com?userPrincipalName,sAMAccountName?sub?(objectClass=*)" 

注意:以下使用WireShark的所有跟踪。

当CN等于sAMAcountMame名称时,我定义了用户john:

在这里输入图像说明

我只能使用john(sAMAcountMame)进行身份validation。 请在下面findLDAP绑定请求:

在这里输入图像说明

LDAP绑定响应:

在这里输入图像说明

然后,当CN不等于sAMAcountMame名称时,我定义了用户johnd:

在这里输入图像说明

不幸的是,我无法使用johnd(sAMAcountMame)进行身份validation。 请在下面findLDAP绑定请求:

在这里输入图像说明

LDAP绑定响应:

在这里输入图像说明

我可以使用全名[email protected]进行身份validation。 请在下面findLDAP绑定请求:

在这里输入图像说明

LDAP绑定响应:

在这里输入图像说明

问题:

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

谢谢你的帮助!

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

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

使用UPN可能更可靠,因为displayName可能包含一些人类可读的string(例如,一个人的全名),并不保证是唯一的。 DOMAIN \ USERNAME表单也应该是唯一的,但是依赖于NetBIOS域名,现在被认为是过时的。