我们有一个ldap,配置为绑定一个不同于登录用户的bindDN和它自己的bindCredential。
bindDN cn=appUser,dc=testOrgManagement,dc=com
bindCredential: somePassword
我正在尝试配置Spring安全性LDAP模块以使用它,但似乎默认情况下它会尝试绑定为经过身份验证的用户,该用户将无法读取角色,因此不返回任何角色。
尝试以下但无济于事。
@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(securedEnabled = true)
public class SpringSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.ldapAuthentication()
.contextSource()
.url("ldaps://ldap.dev.testorg.com:636/")
.managerDn("cn=appUser,dc=testOrgManagement,dc=com")
.managerPassword("somePassword")
.and()
.userSearchFilter("(uid={0})")
.userSearchBase("ou=division1,dc=testorg,dc=com")
.groupSearchBase("ou=division1,dc=testorg,dc=com")
.groupSearchFilter("(uniqueMember={1})")
.groupRoleAttribute("cn" )
.authoritiesMapper(grantedAuthoritiesMapper());
}
public GrantedAuthoritiesMapper grantedAuthoritiesMapper() {
return new GrantedAuthoritiesMapper() {
Set roles = new HashSet<LdapAuthority>();
@Override
public Collection<? extends GrantedAuthority> mapAuthorities(Collection<? extends GrantedAuthority> authorities) {
for (GrantedAuthority authority : authorities) {
if (SecurityRoles.getRoleMap().containsKey(authority.getAuthority())) {
roles.add(new LdapAuthority((String) SecurityRoles.getRoleMap().get(authority.getAuthority())));
}
}
return roles;
}
};
}
}
似乎spring使用BindAuthenticator.java尝试绑定为用户,并且在搜索时不返回任何角色。我认为managerDn和managerPassword实际上是bindDN及其凭证,但似乎并非如此。它似乎只是一个用户。
知道怎么做到这一点?谢谢!