0

我的客户正在使用 AD ,我需要通过 LDAP 在 java 中验证我的用户,我写了这个简单的代码

 Hashtable env = new Hashtable();
    env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
    env.put(Context.PROVIDER_URL, "ldap://10.254.***.***);
    env.put(Context.SECURITY_AUTHENTICATION, "Simple");
    env.put(Context.SECURITY_PRINCIPAL, "cn=s***.u***,ou=All Users,dc=p***,dc=net,dc=**");
    env.put(Context.SECURITY_CREDENTIALS, "******");
     
    try {
        DirContext ctx = new InitialDirContext(env);
        System.out.println("connected");
        System.out.println(ctx.getEnvironment());
         
        // do something useful with the context...
     
        ctx.close();
     
    } catch (AuthenticationNotSupportedException ex) {
        System.out.println("The authentication is not supported by the server"+ex);
    } catch (AuthenticationException ex) {
        System.out.println("incorrect password or username"+ex);
    } *catch (NamingException ex) {
        System.out.println("error when trying to create the context"+ex);
    }
        }*

此代码引发以下异常

密码或用户名不正确javax.naming.AuthenticationException:[LDAP:错误代码 49 - 80090308:LdapErr:DSID-0C090453,注释:AcceptSecurityContext 错误 r,数据 52e,v3839]

但是我可以通过 Ad Explorer 从同一用户连接

在此处输入图像描述

在此处输入图像描述

由于我能够连接 Ad Explorer,因此也应该能够连接 Java 应用程序。

我的代码有什么问题,任何帮助

EDIT 客户有 2 个 AD,AD1、AD2 和 AD1 与 AD2 有信任关系。我尝试登录的用户是 AD2 的一部分,但客户不允许直接与 AD2 通信,因此我需要通过 AD1 进行通信以验证我属于 AD2 的用户。

4

0 回答 0