来自java程序的ldap身份验证错误

Posted

技术标签:

【中文标题】来自java程序的ldap身份验证错误【英文标题】:ldap Authentication Error from java program 【发布时间】:2018-02-05 16:40:50 【问题描述】:
public static void main(String[] args)



    // Setup environment for authenticating

    Hashtable<String, String> environment = 
        new Hashtable<String, String>();

    environment.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory");

    environment.put(Context.PROVIDER_URL,"ldap://192.168.0.100:389");

    environment.put(Context.SECURITY_AUTHENTICATION,"simple");

    environment.put(Context.SECURITY_PRINCIPAL,"uid=dilip.duraiswamy,dc=xxxx,dc=local");

    environment.put(Context.SECURITY_CREDENTIALS,"xxxx");

    try
    
        DirContext authContext = 
            new InitialDirContext(environment);

        // user is authenticated
        System.out.println("USER IS AUTHETICATED");

    
    catch (AuthenticationException ex)
    

        // Authentication failed
        System.out.println("AUTH FAILED : "+ex );

    
    catch (NamingException ex)
    
        ex.printStackTrace();
    

得到错误为 javax.naming.AuthenticationException:[LDAP:错误代码 49 - 80090308:LdapErr:DSID-0C09042F,注释:AcceptSecurityContext 错误,数据 52e,v2580

【问题讨论】:

【参考方案1】:

对于身份验证,添加正确的专有名称。

如果 DN 在有空格或某些特殊字符的情况下未正确指定,通常会出现此问题。

​这里的 52e - 代表无效凭证

http://www-01.ibm.com/support/docview.wss?uid=swg21290631

【讨论】:

感谢它适用于管理员用户,但不适用于普通用户,我可以知道它不适用于普通用户 对于管理员我使用 CN=username,CN=Users,DC=***,DC=local 对于普通用户 im 使用 CN=Dilip D,OU=IT,OU=***,OU=****,DC=****,DC=local 它无法获取数据531 错误,即 LDAP:错误代码 49 - 80090308:LdapErr:DSID-0C09042F,注释:AcceptSecurityContext 错误,数据 531,v2580 检查输入的用户名是否允许登录此工作站

以上是关于来自java程序的ldap身份验证错误的主要内容,如果未能解决你的问题,请参考以下文章

Spring boot Ldap 身份验证失败,LDAP 错误代码 49 - 80090308 数据 52e

身份验证错误49 52e,java应用程序中的jndi无效令牌

Spring Security Active Directory LDAP 身份验证错误

来自 spring mvc 的 LDAP 身份验证

使用 scala 或 java 的 LDAP 身份验证

Zeppelin - LDAP 身份验证失败