Spring LDAP 无法从 AD LDS 读取

Posted

技术标签:

【中文标题】Spring LDAP 无法从 AD LDS 读取【英文标题】:Spring LDAP cannot read from AD LDS 【发布时间】:2016-12-06 07:52:05 【问题描述】:

我目前有一个 Spring-boot 应用程序,它从 Active Directory 获取员工数据,并将它们显示为 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

【问题讨论】:

您是否尝试使用 Apache Directory Studio 之类的 LDAP 浏览器连接到 AD LDS? 是的,我有。它也不允许我进入那里。但是,如果我使用 Softerra 的 LDAP 浏览器,并使用“当前用户”凭据,我可以进入。如果我尝试在 Softerra 浏览器中手动添加我的凭据,它也会报错。 请使用完整的错误堆栈更新问题。错误代码 49 具有关联的子错误代码,如 532、533 等,以指示错误的具体原因,例如帐户禁用、密码过期。 好的,我已经完成了。 【参考方案1】:

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

【讨论】:

【参考方案2】:

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

我将介绍如何使用 Apache Directory Studio 设置连接,但我确信 Spring 文档描述了如何为您的连接配置 SASL。

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

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

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

【讨论】:

以上是关于Spring LDAP 无法从 AD LDS 读取的主要内容,如果未能解决你的问题,请参考以下文章

使用 UserPrincipal 类创建新的 AD-LDS 用户总是失败

从 Spring Boot 应用程序使用 AD LDP 进行 LDAP 身份验证

无法使用 UserPrincipal 类设置 AD-LDS 用户密码

使用 powershell 添加新的 AD 用户不会使用 AD LDS 添加 samaccountname

Spring Boot Security ldap auth针对多个独立的AD域

如何将 AD 组映射到用户角色 Spring Security LDAP