通过LDAP在Java中进行身份验证 - 即使使用经过验证的凭据,凭据也会出错

时间:2016-10-12 20:07:40

标签: java authentication ldap jndi

我有一个简单的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表示用户名有效但密码无效。但是,我也看到了这个错误会阻止显示其他错误的证据,我认为这会误导我的调试工作。

我正在使用的凭据已被验证为正确,而且当我将用户名更改为我知道不正确的无意义字符串时,仍然会出现相同的错误。

除了有效的用户名和无效的密码组合外,还有其他可能导致此错误显示的内容吗?

0 个答案:

没有答案