使用bindDN绑定到LDAP的Spring安全性 - bindCredential

时间:2017-10-19 18:56:04

标签: authentication bind spring-security-ldap

我们有一个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及其凭证,但似乎并非如此。它似乎只是一个用户。

知道怎么做到这一点?谢谢!

0 个答案:

没有答案