如何在 org.apache.directory.ldap.client.api.LdapConnection 中输入带反斜杠的用户名?

How to put username with backslash in org.apache.directory.ldap.client.api.LdapConnection?

我的 LDAP 连接有问题。当我尝试连接 apache directory studio 桌面时,我成功地进行了身份验证。但是当我尝试使用 Java 执行此操作时,它失败了。我认为问题出在包含反斜杠“\”的用户名中。

LdapConnection connection = new LdapNetworkConnection(ldapIp, ldapPort);
connection.bind( "uid=foo\bar,ou=example,dc=example,dc=com", "mysEcretpa55" );

在这种情况下,它表示

Exception in thread "main" org.apache.directory.api.ldap.model.exception.LdapInvalidDnException: unexpected token: b

当我输入 4 个斜杠时,它说:

LdapErr: DSID-0C0903C8, comment: AcceptSecurityContext error, data 52e, v2580

我读到 52e 是凭据错误的错误。我再重复一遍,我在 apache directory studio 桌面应用程序中进行了验证,它工作正常。

是四个斜线:

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

查看 Active Directory: Characters to Escape 中的文档。

两个反斜杠用于 Java 字符串转义,因此您需要两次转义,一次用于 Java,一次用于 LDAP 语法,以获得单反斜杠槽。

至于您收到的 LDAP 错误,在许多情况下 Active Directory 会拒绝有效密码:例如,当从不属于域的客户端进行身份验证时 (a Linux box),或者如果您尝试验证的用户没有登录客户端计算机的权限。但是请仔细检查您的密码。

this SO answer 中提到的结帐提示,用于针对 Windows 域进行身份验证的替代方法。