如何让 Spring Security ActiveDirectoryLdapAuthenticationProvider 工作?

问题描述 投票:0回答:1

在 Spring Boot 应用程序中,我想针对 Active Directory 执行身份验证。作为提前信息,以下 cli ldapsearch 正在运行并按预期提供信息:

ldapsearch -D "cn=boss,ou=admin,dc=example,dc=com" -w pw1234 -h ldap.example.com -p 389 -b "ou=students,dc=example,dc=com" "[email protected]"

因此,在 yaml 配置中,我设置了 ldap 上下文源,如下所示:

spring.ldap.base: "dc=example,dc=com"
spring.ldap.urls: "ldap://ldap.example.com:389"
spring.ldap.username: "cn=boss"
spring.ldap.password: "pw1234"

此设置适用于使用 Spring 的

BindAuthenticator
的本地 OpenDJ 安装,但现在我正在尝试针对现实世界进行身份验证
Active Directory
。为此,我设置了一个
ActiveDirectoryLdapAuthenticationProvider

@Bean
public AuthenticationProvider activeDirectoryLdapAuthenticationProvider() {

    ActiveDirectoryLdapAuthenticationProvider provider =
            new ActiveDirectoryLdapAuthenticationProvider("", "ldap://ldap.example.com:389");

    // provider.setSearchFilter("(uid={0})"); // do I need this?

    return provider;
}

不幸的是,我得到的只是以下错误:

ActiveDirectoryLdapAuthenticationProvider:  Authentication for [email protected] failed:javax.naming.AuthenticationException: [LDAP: error code 49 - 80090308: LdapErr: DSID-0C090439, comment: AcceptSecurityContext error, data 52e, v4563 ]
ActiveDirectoryLdapAuthenticationProvider:  Active Directory authentication failed: Supplied password was invalid

我没有得到任何进一步的信息,例如与 manager-dn (cn=boss) 的初始绑定是否成功,但我认为还有更多需要配置的内容,我只是不知道。也许我必须在某个地方明确设置

manager-dn
manager-password
,但如果是这样,在哪里?

有人知道从哪里开始解决这个问题吗?

spring-security active-directory ldap
1个回答
0
投票

Active Directory 中存在

cn
属性,但您需要将专有名称 (
dn
) 放入您的配置中,与您在
ldapsearch
命令行中使用的相同。

spring.ldap.base: "dc=example,dc=com"
spring.ldap.urls: "ldap://ldap.example.com:389"
spring.ldap.username: "cn=boss,ou=admin,dc=example,dc=com"
spring.ldap.password: "pw1234"

奖励内容:

任何可以搜索 ActiveDirectory 的帐户都可以在您的配置中执行。为避免安全问题,请使用低权限服务帐户。

Active Directory 返回的错误字符串有时包含 gem。如果出现任何错误,LDAP 要求返回 49。使用下周到期的有效密码对用户进行身份验证将返回错误 49。要获取错误 49 背后的确切原因,请执行以下操作:

  1. Data:
    后的十六进制数。在你的情况下,它是
    0x52E
  2. 将其转换为十进制。就是这样
    1326
  3. 在 Windows CMD 提示符下,键入
    net helpmsg 1326

这次用处不大,但以后可能会派上用场。

© www.soinside.com 2019 - 2024. All rights reserved.