gpt4 book ai didi

java - 无法通过 JAVA 中的 LDAP 连接到 Active Directory 服务

转载 作者:行者123 更新时间:2023-12-01 09:13:58 29 4
gpt4 key购买 nike

我是 LDAP 和 Active Directory 新手。我刚刚在 Windows Server 2012 中安装了与 Active Directory 相关的功能并完成所有配置并创建了一个用户。

当我尝试通过 LDAP 连接 Active Directory 时,出现以下错误。

Exception in thread "main" javax.naming.AuthenticationException: [LDAP: error code 49 - 80090308: LdapErr: DSID-0C0903C5, comment: AcceptSecurityContext error, data 52e, v2580]
at com.sun.jndi.ldap.LdapCtx.mapErrorCode(LdapCtx.java:3067)
at com.sun.jndi.ldap.LdapCtx.processReturnCode(LdapCtx.java:3013)
at com.sun.jndi.ldap.LdapCtx.processReturnCode(LdapCtx.java:2815)
at com.sun.jndi.ldap.LdapCtx.connect(LdapCtx.java:2729)
at com.sun.jndi.ldap.LdapCtx.<init>(LdapCtx.java:296)
at com.sun.jndi.ldap.LdapCtxFactory.getUsingURL(LdapCtxFactory.java:175)
at com.sun.jndi.ldap.LdapCtxFactory.getUsingURLs(LdapCtxFactory.java:193)
at com.sun.jndi.ldap.LdapCtxFactory.getLdapCtxInstance(LdapCtxFactory.java:136)
at com.sun.jndi.ldap.LdapCtxFactory.getInitialContext(LdapCtxFactory.java:66)
at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:667)
at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:288)
at javax.naming.InitialContext.init(InitialContext.java:223)
at javax.naming.ldap.InitialLdapContext.<init>(InitialLdapContext.java:134)
at com.infomindz.sample.ldap.LDAPTest.main(LDAPTest.java:79)

我已经尝试了在线文章中给出的一些解决方案,但仍然遇到相同的错误,并且不知道如何解决此类异常。我只尝试过以下代码

public static void main(String[] args) throws NamingException
{

final String ldapSearchBase = "dc=sample,dc=com";

final String ldapUsername = "sampleAdminUser";
final String ldapPassword = "password";

final String ldapAccountToLookup = "sampleUser";


Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, "ldap://XX.XX.XX.XX:389");
env.put(Context.SECURITY_AUTHENTICATION, "simple");
if(ldapUsername != null)
{
env.put(Context.SECURITY_PRINCIPAL, ldapUsername);
}
if(ldapPassword != null)
{
env.put(Context.SECURITY_CREDENTIALS, ldapPassword);
}

LdapContext ctx1 = new InitialLdapContext(env, null);
LDAPTest ldap = new LDAPTest();

SearchResult srLdapUser = ldap.findAccountByAccountName(ctx1, ldapSearchBase, ldapAccountToLookup);

System.out.println("srLdapUser :" + srLdapUser);

}

从我的代码中,以下代码行本身就遇到了错误:

LdapContext ctx1 = new InitialLdapContext(env, null);

如果我在这方面落后了,请发表您的背景。提前致谢。

最佳答案

您需要提供用户的 RDN 作为 SECURITY_PRINCIPAL,例如“cn=Administrator”或完整的 DN,例如“cn=Administrator,ou=xyz,dc=infomindz,dc=com”。

要进行交叉检查,您可以安装 LDAP 浏览器,例如 Apache Directory Studio ( https://directory.apache.org/studio/ ),并尝试连接到提供管理员用户的 RDN 或 DN 的 AD。

关于java - 无法通过 JAVA 中的 LDAP 连接到 Active Directory 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40715457/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com