2015-11-06 63 views
0

我有一个LDAP连接的问题。当我尝试连接apache目录工作室桌面时,我成功进行了身份验证。但是当我尝试用Java来做这件事时,它就会失败。我认为问题在于包含反斜杠“\”的用户名。如何在org.apache.directory.ldap.client.api.LdapConnection中放置带反斜杠的用户名?

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:意外的标记:乙

当我把4斜线它说:

LdapErr:DSID-0C0903C8,注释:AcceptSecurityContext错误,数据52E, v2580

我看到52e是一个错误的凭据错误。我会再次重复,我在apache目录工作室桌面应用程序验证,它工作正常。

回答

1

这四个斜线:

connection.bind("uid=foo\\\\bar,ou=example,dc=example,dc=com", "mysEcretpa55"); 

结帐在Active Directory: Characters to Escape的文档。

两个反斜杠用于Java字符串转义,所以您需要双转义,一次用于Java,一次用于LDAP语法,以获得单个反斜杠低谷。

至于你得到LDAP错误,有一些案件时,Active Directory中拒绝了有效的密码:例如,从客户端不是域的一部分(Linux中),或者如果身份验证时,您尝试进行身份验证的用户无权登录客户端计算机。但请仔细检查您的密码。

结账提示在this SO answer中提到了针对Windows域进行身份验证的替代方法。