我已经在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:LdapErr:DSID-0C09042F,注释:AcceptSecurityContext错误,数据2030,v2580。]
在com.sun.jndi.ldap.LdapCtx.mapErrorCode(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_INVALID_CREDENTIALS
。我不确定该传递什么
SECURITY_AUTHENTICATION
参数。
我尝试在参数中以SECURITY_AUTHENTICATION
的身份跟随>
CN=ecode,CN=Users,DC=ecode,DC=com
ecode@ecode.com
在Powershell中,当我尝试
dsquery user -name ecode
我得到这个输出
CN=ecode,CN=Users,DC=ecode,DC=com
答案 0 :(得分:1)
我不是Java开发人员(至少最近不是),但是根据examples here,您应该执行以下操作:
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");
答案 1 :(得分:1)
基本上,这就是我针对Active Directory和一些纯LDAP服务器成功使用的方法-第五行是不对的;但是不匹配的括号不能编译,因此我假设这是一个复制/粘贴问题,并且该行实际上是使用您尝试过的另一种登录ID格式的注释。
SECURITY_PRINCIPAL有三个选项,因为Active Directory的LDAP实现使您可以与userPrincipalName( dsquery用户-o upn -name ecode ),sAMAccountName(domain \ logonID)绑定但是 dsquery用户-o samid -name ecode 出于某种原因仅返回sAMAccountName的logonID组件,或完全限定的DN( dsquery用户-o dn-名称ecode )。
如果您确认所使用的ID与以下之一匹配,请查看错误的密码计数是否在增加。错误的密码计数不是复制的属性;如果您有多个域控制器,请以LDAP连接中使用的一个为目标。如果计数器在增加,则说明您具有正确的security_principal且密码被拒绝(密码错误或帐户可能已锁定)
df['Address'] = df[addColumns].fillna('').astype(str).apply(lambda x: ', '.join([i for i in x if i]), axis=1)