Spring LDAP无法从AD LDS读取

时间:2016-12-06 07:52:05

标签: java spring active-directory ldap adlds

我目前有一个Spring-boot应用程序,它从Active Directory获取Employee数据,并将它们显示为JSON。

但是,我不想直接链接到Active Directory,我想使用Active Directory轻量级服务。

我假设我可以以相同的方式设置连接和连接,但我一直收到错误49(凭据无效)错误。我使用的是与Active Directory相同的凭据。

这是Spring.xml配置凭据:

 <bean id="contextSource" class="org.springframework.ldap.core.support.LdapContextSource">
        <property name="url" value="ldap://example.com:389" />
        <property name="base" value=" DC=example,DC=com" />
        <property name="userDn" value="jsmith@example.com" />
        <property name="password" value="password" />
    </bean>

    <bean id="ldapTemplate" class="org.springframework.ldap.core.LdapTemplate">
        <constructor-arg ref="contextSource" />
        <property name="ignorePartialResultException" value="true" />
    </bean>

如果我尝试将URL更改为AD LDS URL(使用localhost),我会收到Ldap错误49.有没有人有这些技术的经验?请帮忙。

编辑:

如果我尝试使用我的Active Directory域用户名,我会得到:

The authentication failed
 - [LDAP: error code 49 - 8009030C: LdapErr: DSID-0C0903C4, comment: AcceptSecurityContext error, data 2030, v295a

如果我尝试使用userDN,我会:

The authentication failed
 - [LDAP: error code 80 - 80090304: LdapErr: DSID-0C0903C4, comment: AcceptSecurityContext error, data 20ee, v295a

2 个答案:

答案 0 :(得分:0)

您需要提供用户的完整DN作为“userDn”,例如cn = jsmith @ example.com,ou = xyz,dc = abc,dc-com。

答案 1 :(得分:0)

我自己遇到了这个问题,并且能够解决。我遇到的问题是由于我的AD LDS配置了SASL,所以进行简单的绑定不起作用。有关SASL的说明,请参见LDAPv3身份验证方法rfc2829(第6.1节)。

我将逐步使用Apache Directory Studio建立连接,但是我确定Spring文档描述了如何为您的连接配置SASL。

Configure connection to server在我的测试实验室中,我没有使用TLS进行保护,因此我只能绑定到389。

Configure authentication在配置身份验证时,您想要选择LDAPv3服务器(我的AD LDS支持的DIGEST-MD5)支持的SASL方法。输入用户和密码的凭据(我可以使用屏幕截图中提供的完整DN,也可以使用cn)。使用DIGEST-MD5身份验证方法时,还必须在“ SASL设置”下提供一个SASL领域。这是用于绑定的Principal的领域。

如果要检查LDAP服务器(如AD LDS)支持的SASL方法,可以使用ldp.exe(或Softerra)工具来检索bind metadata并查找支持的LDAP SASL方法。