我的客户正在使用 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 的用户。