我有一个简单的Java代码块,用于通过LDAP对用户进行身份验证。这是一个简单的功能,可以在网上很多地方找到:
public static void main(String[] args) {
String user = "cn=userid@my.domain.net,ou=users,dc=my,dc=domain,dc=net";
String password = "password";
String ldapHost = "ldap://my.domain.net";
String ldapPort = "999";
// TODO Auto-generated method stub
try {
Hashtable props = new Hashtable();
props.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
props.put(Context.SECURITY_AUTHENTICATION,"Simple");
props.put(Context.SECURITY_PRINCIPAL, user);
props.put(Context.SECURITY_CREDENTIALS, password);
props.put(Context.PROVIDER_URL, ldapHost + ":" + ldapPort);
LdapContext ldapCtxt = new InitialLdapContext(props, null);
System.out.println("ldapCtxt "+ldapCtxt.toString());
} catch (NamingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
但我一直收到以下错误:
[LDAP: error code 49 - 80090308: LdapErr: DSID-0C0903A9, comment: AcceptSecurityContext error, data 52e, v1db1
我知道此错误是凭据错误,根据文档和其他论坛,十六进制值52e表示用户名有效但密码无效。但是,我也看到了这个错误会阻止显示其他错误的证据,我认为这会误导我的调试工作。
我正在使用的凭据已被验证为正确,而且当我将用户名更改为我知道不正确的无意义字符串时,仍然会出现相同的错误。
除了有效的用户名和无效的密码组合外,还有其他可能导致此错误显示的内容吗?