java SpringBoot中的LDAP身份验证不起作用

yptwkmov  于 2023-06-20  发布在  Java
关注(0)|答案(1)|浏览(163)

下面是我的spring security ldap身份验证代码片段,我可以对管理员用户进行身份验证,如案例2所示。但是,当我无法对user1进行身份验证时,如案例1所示,对于不同的基础dn。

protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        if (ldapEnabled) {
            auth.ldapAuthentication()
                    .userDetailsContextMapper(customContextMapper())
                    .userSearchFilter("(&(objectClass=user)(" + userDn+ "))")
                    .contextSource()
                    .url(ldapProviderUrl + baseDn.trim().replaceAll(" ", "%20"))
                    .managerDn(ldap.username)
                    .managerPassword(ldap.password);
        } else {
            super.configure(auth);
        }
    }

我使用的属性是For case 1

ldap.enabled=true
ldap.provider.url=ldap://XX.XX.XX.XX:389/
ldap.username=CN=XXXXXX,OU=**People**,DC=pserv,DC=local
ldap.password=#########
ldap.base.dn=OU=**User Accounts**,DC=pserv,DC=local
ldap.user.dn.patterns=sAMAccountName={0}
ldap.user.password.attribute=userPassword
ldap.search.base.group=ou=groups

对于情况2

ldap.enabled=true
ldap.provider.url=ldap://XX.XX.XX.XX:389/
ldap.username=CN=XXXXXX,OU=**People**,DC=pserv,DC=local
ldap.password=#########
ldap.base.dn=OU=**People**,DC=pserv,DC=local
ldap.user.dn.patterns=sAMAccountName={0}
ldap.user.password.attribute=userPassword
ldap.search.base.group=ou=groups

和我的ldap目录树:(失败案例)案例1:

工作Ldap目录情况2:

问题:
1.是因为我的ldap.username OU在“人员”下吗?
1.我修复了case 1 nu替换为%20时基本dn中的空间问题。但我无法验证用户身份。获取此错误

org.springframework.security.authentication.InternalAuthenticationServiceException: [LDAP: error code 32 - 0000208D: NameErr: DSID-03100245, problem 2001 (NO_OBJECT), data 0, best match of:
    'DC=pserv,DC=local'
 ]; nested exception is javax.naming.NameNotFoundException: [LDAP: error code 32 - 0000208D: NameErr: DSID-03100245, problem 2001 (NO_OBJECT), data 0, best match of:
    'DC=pserv,DC=local'
 ]; remaining name '/'
z9smfwbn

z9smfwbn1#

看起来问题出在spring-security上,无法处理带有空格的basedn。
https://github.com/spring-projects/spring-security/issues/2264
将basedn中的空间替换为%20有助于成功构建应用程序。但是,上面提供的解决方法对我不起作用。

相关问题