如何使用Spring Security从LDAP获得用户角色

时间:2019-06-13 06:54:53

标签: spring-security-ldap

我能够与ldap联系并获得响应,但是我想我的主要对象授权机构的大小为零,其中提供了角色详细信息。 为了获得ldap角色详细信息,我还需要传递什么其他输入信息?

@Override
public void configure(AuthenticationManagerBuilder auth) throws Exception {
    auth.ldapAuthentication()
        .userDnPatterns("uid={0},ou=TestOu")
        .contextSource()
        .url("ldaps://XX:768");
        }

我也尝试过使用DirContextOperations对象,它包含除角色以外的许多属性,该角色在ldapit中定义,并且我可以在运行ldap查询时获得该角色, 问题仅在于春季安全性

请帮助

2 个答案:

答案 0 :(得分:0)

“角色”对于LDAP目录服务器并没有任何意义。

LDAPv3仅了解静态组。

某些LDAP Directory Server产品允许在条目级别从“动态属性”检索组成员身份。

您可以将“角色”定义为条目的属性。

答案 1 :(得分:0)

知道了!!!!!实现自定义AuthenticationProvider和LdapAuthenticator,并使用BindAuthenticator。我们必须使用BindAuthenticator设置以下内容

     authenticator.setUserDnPatterns(new String[]{"XX"});
     authenticator.setUserAttributes(new String[]{"nsrole"});

在配置中

@Override     公共无效configure(AuthenticationManagerBuilder auth)引发异常{

    auth.authenticationProvider(this.customLdapAuthenticationProvider());
}

@Bean(name = "ldapAuthenticationProvider")
public AuthenticationProvider customLdapAuthenticationProvider() {

    LdapUserDetailsMapper userDetailsMapper = new UserMapper();

    CustomLdapAuthenticationProvider provider = new CustomLdapAuthenticationProvider(this.ldapAuthenticator(),
            new NullLdapAuthoritiesPopulator());
    provider.setUserDetailsContextMapper(userDetailsMapper);

    return provider;

}

@Bean(name = "ldapAuthenticator")
public LdapAuthenticator ldapAuthenticator() {

    BindAuthenticator authenticator = new BindAuthenticator(this.contextSource());
    authenticator.setUserDnPatterns(new String[] { "uid={0},ou=people" });
    authenticator.setUserAttributes(new String[] { "nsrole" });
    return authenticator;
}

@Bean(name = "contextSource")
public DefaultSpringSecurityContextSource contextSource() {

    DefaultSpringSecurityContextSource contextSource = new DefaultSpringSecurityContextSource(ldapUrl);
    return contextSource;
}

私有类UserMapper扩展了LdapUserDetailsMapper {

    @Override
    public UserDetails mapUserFromContext(DirContextOperations ctx, String username,
            Collection<? extends GrantedAuthority> authorities) {


        List<GrantedAuthority> roles = new ArrayList<GrantedAuthority>();

        Attributes attrs = ctx.getAttributes();

            Sysout(attr)
        UserDetails userDetails = super.mapUserFromContext(ctx, username, roles);

        return userDetails;
    }

}