我的LDAP连接有问题。当我尝试连接到apachedirectoryStudio桌面时,我成功地验证了。但当我尝试用Java来做这件事时,它失败了。我认为问题出在包含反斜杠"\"的用户名上。
LdapConnection connection = new LdapNetworkConnection(ldapIp, ldapPort);
connection.bind( "uid=foo\bar,ou=example,dc=example,dc=com", "mysEcretpa55" );
在这种情况下,它说
线程"main"org.apache.directory.api.ldap.model.Exception.LdapInvalidDnException:意外令牌:b
当我放4个斜线时,它会说:
LdapErr:DSID-0C0903C8,注释:AcceptSecurityContext错误,数据52e,v2580
我读到52e是一个错误的凭据。我将再次重复我在apachedirectoryStudio桌面应用程序中验证过的内容,它运行良好。
这是四个斜杠:
connection.bind("uid=foo\\bar,ou=example,dc=example,dc=com", "mysEcretpa55");
签出Active Directory中的文档:要转义的字符。
两个反斜杠用于Java字符串转义,因此您需要进行两次转义,一次用于Java,另一次用于LDAP语法,以获得单个反斜杠槽。
至于您遇到的LDAP错误,Active Directory拒绝有效密码的情况有很多:例如,从不属于域的客户端(Linux框)进行身份验证时,或者您试图进行身份验证的用户没有登录客户端计算机的权限。但一定要仔细检查你的密码。
本SO回答中提到的针对Windows域进行身份验证的其他方法的结账提示。