java - Active Directory userPrincipleName 与用户登录名不同

标签 java active-directory ldap userprincipal

我有一个应用程序需要登录 AD,然后我必须获取用户的distinguishedName

我能够使用提供的登录名成功登录到 AD,但是当我尝试在 AD 中搜索用户对象时,查询不会返回任何内容。

我的查询是(这里我假设登录名为 userPrincipleName):

userPrincipleName=user@sub.domain.com

当我进一步研究这个问题时,我发现对于这个用户,我们有 -

用户登录名 = user@sub.domain.com
userPrincipleName = user@domain.com

据我所知,登录名应该与 userPrincipleName 相同。 有人可以告诉我这种情况是否真的可能,其中这两个属性可能不同?

如果可能的话,我如何使用提供的登录名获取用户的distinguishedName

最佳答案

Active Directory 有许多命名属性:

distinguishedName:这是对象的完整 LDAP DN,例如 cn=Joe Smith、ou=Users、dc=MyDomain、dc=com,并且这在树中必须是唯一的并且是强制执行的,也就是说 cn=Joe Smith 节点在容器中必须是唯一的:ou=Users,dc=MyDomain,dc=com

sAMAccountName:这通常是用户的简称。在域内必须是唯一的并且是强制的。像geoffc 或jsmith。

用户主体名称:这看起来像电子邮件地址,对于 Office 365 将是您的电子邮件地址。 geoffc@mydomain.com 这应该在您的森林中是唯一的,但实际上并没有强制执行唯一性,通过 LDAP,您甚至可以在该字段中写入无意义的内容。在域的根部,您可以定义附加 SPN(服务提供商名称?我认为),然后将其显示在 Active Directory 用户和计算机中作为可能的域扩展添加到用户。然而,尽管 ADUC 将其显示为拆分属性、值和域后缀,但它仍存储为简单的字符串。

displayName:这通常是 Joe Smith,为用户显示的名称。

邮件:用户的实际电子邮件地址,jsmith@mail.mydomain.com。对于 Office365,该值也应位于 UserPrincipalName 中。

因此,决定在登录时可以向用户询问什么,然后查找适当的属性。如果不使用 Office 365,UPN 实际上是最不可靠的使用值。

关于java - Active Directory userPrincipleName 与用户登录名不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42832709/

相关文章:

amazon-web-services - Wso2 在普通 ldap 端口 389 上与事件目录集成

c# - 如何在复杂环境中使用 FQDN 获取 NETBIOS 域名

grails - Grails Spring Security:如何为LdapAuthenticator使用自己的用户域?

ldap - 如何通过 phpldapadmin 将 memberof 属性添加到 ldap 用户

javascript - 3D Secure 的 Stripe 支付意图仍然不完整

java - 您可以使用增强的 for every 循环将元素添加到数组中吗?

java - 运算符不能应用于 float ,'android.widget.EditText'

java - 将输出数据写入文本文件会在文本文件中给出不完整的结果

java - 如何配置 JDBC 连接以使用与当前用户不同的 AD 用户?

ruby - 通过 ruby​​ net-ldap 查询 LDAP 用户的更好方法?