Spring Security Ldap,只登录指定组中的用户

Posted

技术标签:

【中文标题】Spring Security Ldap,只登录指定组中的用户【英文标题】:Spring Security Ldap, log in only users in specified group 【发布时间】:2017-11-03 18:48:33 【问题描述】:

就像标题一样,我希望只有规范的用户。这是我的验证码:

public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception 

    auth.ldapAuthentication().userSearchFilter("(sAMAccountName=0)")
    .contextSource(contextSource());

我发现有groupSearchFiltergroupSearchBasegroupRoleAttribute之类的函数,但我不知道如何使用它们

【问题讨论】:

【参考方案1】:

我对 Megha 的解决方案做了一些修改

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter 

    @Configuration
    protected static class AuthenticationConfiguration extends  GlobalAuthenticationConfigurerAdapter 

        @Override
        public void init(AuthenticationManagerBuilder auth) throws Exception               
            DefaultSpringSecurityContextSource contextSource = new DefaultSpringSecurityContextSource("ldap://ip:port/DC=xxxx,DC=yyyy");
            contextSource.setUserDn("user_service_account");
            contextSource.setPassword("password_user_service_account");
            contextSource.setReferral("follow"); 
            contextSource.afterPropertiesSet();

            LdapAuthenticationProviderConfigurer<AuthenticationManagerBuilder> ldapAuthenticationProviderConfigurer = auth.ldapAuthentication();

            ldapAuthenticationProviderConfigurer
                .userSearchBase("OU=Users,OU=Servers")
                .userSearchFilter("(&(cn=0)(memberOf=CN=GROUP_NAME,OU=Groups,OU=Servers,DC=xxxx,DC=yyyy))")
                .contextSource(contextSource);
        
    

    @Override
    protected void configure(HttpSecurity http) throws Exception 

        http.authorizeRequests()
            .antMatchers("/admin/**").authenticated().and()
            .httpBasic();
    

【讨论】:

【参考方案2】:
"(sAMAccountName=0)"

应该换成下面的

"(&(objectCategory=Person)(sAMAccountName=*)(memberOf=cn=entergroup,ou=users,dc=company,dc=com))"

其中cn、ou、dc是目录中组的规格

【讨论】:

【参考方案3】:

这取决于您的群组成员资格的设置方式。类似以下的方法可能会起作用,根据需要替换您的组 dn 和对象类:

groupSearchBase("cn=yourgroup,ou=groups")
groupSearchFilter("(uniqueMember=0)")

【讨论】:

以上是关于Spring Security Ldap,只登录指定组中的用户的主要内容,如果未能解决你的问题,请参考以下文章

Spring Security LDAP 登录错误凭据

使用 Spring Security 通过 MySQL-LDAP-Thymeleaf 登录

使用 spring security ldap 禁用基本身份验证

如何使用 ldap 和 spring security 从登录的用户那里获取电子邮件

登录表单用户凭据而不是 LDAP Spring Security 中的硬编码 UserDn 和密码

Spring Security Ldap验证userDn和登录表单中的密码