我正在使用Apache LDAP API连接到MS Active Directory,但我收到以下错误:
DEBUG#c.s.m.c.r.c.ApacheLdapClient ## anonymous#http-bio-8080-exec-6 ###连接到LDAP的意外错误org.apache.directory.api.ldap.model.exception.LdapAuthenticationExcepti on:80090308:LdapErr:DSID-0C0903D9,评论:AcceptSecurityContext错误,数据52e,v2580 ^ @
在这种情况下,我只是在LdapConnectionConfig.Name和LdapConnect类的bind方法中提供了LDAP用户名和密码。
基于一些研究和测试,我可以看到,当我提供用户的完整DN(专有名称)时,连接和绑定工作正常。
所以我的问题是:有没有办法使用Apache LDAP API连接并绑定到MS AD,只提供用户名和密码(而不是完整的DN)?
以下是失败源代码的摘录:
LdapConnection conn = new LdapNetworkConnection();
connParams.setLdapHost(LDAP_HOST);
connParams.setLdapPort(389);
connParams.setName(test_user);
connParams.setCredentials(TEST_USER_PASSWORD);
LdapConnection connection = new LdapConnection(connParams);
connection.bind(test_user, TEST_USER_PASSWORD);
这个可以正常工作:
LdapConnection conn = new LdapNetworkConnection();
connParams.setLdapHost(LDAP_HOST);
connParams.setLdapPort(389);
connParams.setName(CN=test_user,DC=Example,DC=com);
connParams.setCredentials(TEST_USER_PASSWORD);
LdapConnection connection = new LdapConnection(connParams);
connection.bind(CN=test_user,DC=Example,DC=com, TEST_USER_PASSWORD);
答案 0 :(得分:0)
您必须使用专有名称进行绑定 - 毕竟LDAP不了解Active Directory。当然,您可以先使用服务帐户来检索sAMAccountName的dn。