Active directory 查询WIndows服务器上的LDAP以获取Active Directory';用户

Active directory 查询WIndows服务器上的LDAP以获取Active Directory';用户,active-directory,ldap,windows-server-2012,Active Directory,Ldap,Windows Server 2012,我在Windows 2012 Server中安装了AD DS和AD LDS 需求是使用Java查询LDAP 我试过这个: Hashtable env = new Hashtable(); env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory"); env.put(Context.PROVIDER_URL, "ldap://55.22.44.22:53358"); env.put(Context.SEC

我在Windows 2012 Server中安装了AD DS和AD LDS

需求是使用Java查询LDAP

我试过这个:

Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, "ldap://55.22.44.22:53358");
env.put(Context.SECURITY_AUTHENTICATION, "simple");
"CN=ecode,CN=Users,DC=ecode,DC=com");
env.put(Context.SECURITY_PRINCIPAL, "ecode@ecode.com");
env.put(Context.SECURITY_CREDENTIALS, "ddadadad");

DirContext context = new InitialDirContext(env);
我得到以下错误

线程“main”javax.naming.AuthenticationException中出现异常:[LDAP:错误代码49-8009030C:LDAPPER:DSID-0C090042F,注释:AcceptSecurityContext错误,数据2030,v2580�]
位于com.sun.jndi.ldap.LdapCtx.maperrocode(LdapCtx.java:3154)
位于com.sun.jndi.ldap.LdapCtx.processReturnCode(LdapCtx.java:3100)
位于com.sun.jndi.ldap.LdapCtx.processReturnCode(LdapCtx.java:2886)
位于com.sun.jndi.ldap.LdapCtx.connect(LdapCtx.java:2800) 位于com.sun.jndi.ldap.LdapCtx.(LdapCtx.java:319) 位于com.sun.jndi.ldap.LdapCtxFactory.getUsingURL(LdapCtxFactory.java:192) 位于com.sun.jndi.ldap.LdapCtxFactory.getUsingURLs(LdapCtxFactory.java:210) 位于com.sun.jndi.ldap.LdapCtxFactory.getLdapCtxInstance(LdapCtxFactory.java:153) 位于com.sun.jndi.ldap.LdapCtxFactory.getInitialContext(LdapCtxFactory.java:83)

我知道代码49是
LDAP\u无效的\u凭证
。我不确定要传递什么
SECURITY\u身份验证
参数

我在参数中尝试了以下作为
SECURITY\u身份验证

CN=ecode,CN=Users,DC=ecode,DC=com
ecode@ecode.com
在Powershell中,当我尝试

dsquery user -name ecode 
我得到这个输出

CN=ecode,CN=Users,DC=ecode,DC=com
我不是一名Java开发人员(至少最近不是),但根据,您应该这样做:

env.put(Context.SECURITY_AUTHENTICATION, "simple");
env.put(Context.SECURITY_PRINCIPAL, "CN=ecode,CN=Users,DC=ecode,DC=com");
env.put(Context.SECURITY_CREDENTIALS, "ddadadad");
我不是一名Java开发人员(至少最近不是),但根据,您应该这样做:

env.put(Context.SECURITY_AUTHENTICATION, "simple");
env.put(Context.SECURITY_PRINCIPAL, "CN=ecode,CN=Users,DC=ecode,DC=com");
env.put(Context.SECURITY_CREDENTIALS, "ddadadad");

这基本上就是我在Active Directory和一些纯LDAP服务器上成功使用的方法——第五行不正确;但是不应该编译一个不匹配的括号,所以我假设这是一个复制/粘贴问题,该行实际上是您尝试过的另一种登录ID格式的注释

安全性主体有三个选项,因为Active Directory的LDAP实现允许您绑定userPrincipalName(dsquery user-o upn-name ecode),sAMAccountName(domain\logonID,但dsquery user-o samid-name ecode出于某种原因仅返回sAMAccountName的logonID组件),或完全限定的DN(dsquery user-o DN-name ecode

如果已确认所使用的ID与其中一个匹配,请查看错误密码计数是否递增。错误密码计数不是已复制属性;如果您有多个域控制器,请将LDAP连接中使用的域控制器作为目标。如果计数器递增,则您拥有正确的安全性主体和密码ord被拒绝(密码错误或可能是锁定的帐户)


这基本上就是我在Active Directory和一些纯LDAP服务器上成功使用的方法——第五行不正确;但是不应该编译一个不匹配的括号,所以我假设这是一个复制/粘贴问题,该行实际上是您尝试过的另一种登录ID格式的注释

安全性主体有三个选项,因为Active Directory的LDAP实现允许您绑定userPrincipalName(dsquery user-o upn-name ecode),sAMAccountName(domain\logonID,但dsquery user-o samid-name ecode出于某种原因仅返回sAMAccountName的logonID组件),或完全限定的DN(dsquery user-o DN-name ecode

如果已确认所使用的ID与其中一个匹配,请查看错误密码计数是否递增。错误密码计数不是已复制属性;如果您有多个域控制器,请将LDAP连接中使用的域控制器作为目标。如果计数器递增,则您拥有正确的安全性主体和密码ord被拒绝(密码错误或可能是锁定的帐户)