下面是我的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 '/'
1条答案
按热度按时间z9smfwbn1#
看起来问题出在spring-security上,无法处理带有空格的basedn。
https://github.com/spring-projects/spring-security/issues/2264
将basedn中的空间替换为%20有助于成功构建应用程序。但是,上面提供的解决方法对我不起作用。