我的 AD 安装中有 2 个用户具有相同的 CN
CN=jack,CN=Users,DC=xyz,DC=com and
CN=jack,OU=abc,DC=xyz,DC=com
当我尝试使用 Apache Directory Studio 客户端向 AD 服务器进行身份验证并提供以下凭据时
User: jack
Password: <password>
身份验证失败。以下凭证有效
User: CN=jack,CN=Users,DC=xyz,DC=com
Passwprd: <password>
当我只有一个具有CN=tom,DC=xyz,DC=com
给定 CN 的用户时
我可以使用
User: tom
Password: <password>
而不必指定整个 DN ( CN=tom,DC=xyz,DC=com
)。
我需要编写一个模块来根据 AD 安装对用户进行身份验证。我只有用户名和密码,没有完全合格的 BASE DN。我该怎么做,因为问题似乎发生在有多个用户具有相同 CN 时?
编辑:我可以将 AD 服务器配置为绑定用户的邮件地址而不是 CN 吗?这可以解决我的问题,因为邮件地址是唯一的,而 CN 不是
答案1
我不知道该说什么,主要是因为很难确切地明白你在问什么。
如果您的组织在不同的上下文/OU 中创建“重复”的用户名,这在 AD 中当然是允许的,那么您编写的任何代码都必须支持在不同上下文中使用用户名。
这是否是一个好主意或“正确”是一个由您的组织内部决定的问题。
答案2
用户的 sAMAccountName 在给定域内应该是唯一的,因此您应该能够让客户端根据 sAMAccountName 查询 AD,然后使用您得到的完整 X.400 名称进行身份验证。
如果您有多个域,那么无论如何您都需要域 + 用户 ID(sAMAccountName)进行身份验证。
答案3
您尝试使用相对可分辨名称 (RDN),而不是 CN。相对可分辨名称在 OU(其相对路径)内是唯一的,但在域内可能不是唯一的。您应该使用可分辨名称 (DN),它在域内是明确且唯一的。
答案4
在 Active Directory 的用户对象中,samaccountname(登录名)和 UPN(用户主体名称)用于登录到 Active Directory 域。
以及用户对象的以下属性必须是唯一的在 Active Directory 中
正如你的问题...
CN=jack,CN=Users,DC=xyz,DC=com
CN=jack,OU=abc,DC=xyz,DC=com
您按上述方式创建两个用户对象。上述语法是 DN。
您将检查该用户的 samaccountname(登录名)或 UPN。我的意思是上述用户有不同的 samaccountname 和 UPN。检查这些用户的真实 samaccountname 或 UPN 后,尝试登录。
PS 此外,DN 还具有独特的功能。