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());
我发现有groupSearchFilter
和groupSearchBase
或groupRoleAttribute
之类的函数,但我不知道如何使用它们
【问题讨论】:
【参考方案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 通过 MySQL-LDAP-Thymeleaf 登录
使用 spring security ldap 禁用基本身份验证
如何使用 ldap 和 spring security 从登录的用户那里获取电子邮件