Java 使用JNDI连接到AD-为什么必须以以下格式提供安全主体username@domain?

Java 使用JNDI连接到AD-为什么必须以以下格式提供安全主体username@domain?,java,active-directory,ldap,Java,Active Directory,Ldap,我正在尝试使用标准Java(javax.naming.*)库连接到Active Directory 这似乎与连接到任何其他LDAP的工作方式完全相同,只是有一个区别:SECURITY\u PRINCIPAL需要在表单中提供 sAMAccountName@domainComponent(s) e、 g 试图使用一个有效的DN,该DN指向完全相同的用户,如 env.put(Context.SECURITY_PRINCIPAL, "cn=foo,cn=Users,dc=bar,dc=baz,dc=o

我正在尝试使用标准Java(javax.naming.*)库连接到Active Directory

这似乎与连接到任何其他LDAP的工作方式完全相同,只是有一个区别:
SECURITY\u PRINCIPAL
需要在表单中提供

sAMAccountName@domainComponent(s)
e、 g

试图使用一个有效的DN,该DN指向完全相同的用户,如

env.put(Context.SECURITY_PRINCIPAL, "cn=foo,cn=Users,dc=bar,dc=baz,dc=org

导致
身份验证异常
。这是Active Directory特有的吗?对于其他LDAP DS,最后一种方法始终有效。

这不是您正在执行的AD身份验证。您只是在执行LDAP绑定。AD auth是Kerberos


AD的LDAP竞争对手希望主体作为UPN、samaccountname或NT4样式的登录。不接受DNs。

这不是您正在执行的AD身份验证。您只是在执行LDAP绑定。AD auth是Kerberos


AD的LDAP竞争对手希望主体作为UPN、samaccountname或NT4样式的登录。不接受DNs。

请粘贴堆栈跟踪。请粘贴堆栈跟踪。
env.put(Context.SECURITY_PRINCIPAL, "cn=foo,cn=Users,dc=bar,dc=baz,dc=org