Я настроен пружинный загрузки безопасности в соответствии с: https://spring.io/guides/gs/securing-web/Spring Security LDAP аутентификация пользователя должна быть членом группы AD
Я могу войти в систему, используя свои учетные данные отлично. Тем не менее, мне нужно добавить проверку того, что пользователь AD также должен принадлежать определенной группе AD (то есть AD-это-специфическая группа). При входе в систему, если пользователь не принадлежит к определенной группе AD, он должен вернуть ошибку входа.
Я искал часы и не могу найти четкий способ сделать это в WebSecurityConfigurerAdapter
, правильно ли я использую auth.groupSearchFilter
?
Вот мой код:
@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
//@Autowired
//private LdapContextSource contextSource;
@Autowired
Environment env;
public LdapContextSource contextSource() {
LdapContextSource contextSource= new LdapContextSource();
System.out.println("url:" + env.getRequiredProperty("ldap.url"));
System.out.println("base:" + env.getRequiredProperty("ldap.baseDn"));
System.out.println("UserDn:" + env.getRequiredProperty("ldap.bindDn"));
//System.out.println("password:" + env.getRequiredProperty("ldap.batchPassword"));
contextSource.setUrl(env.getRequiredProperty("ldap.url"));
contextSource.setBase(env.getRequiredProperty("ldap.baseDn"));
contextSource.setUserDn(env.getRequiredProperty("ldap.bindDn"));
contextSource.setPassword(env.getRequiredProperty("ldap.batchPassword"));
contextSource.afterPropertiesSet();
return contextSource;
}
@Override
protected void configure(AuthenticationManagerBuilder auth)
throws Exception {
auth
.ldapAuthentication()
.userSearchFilter("(cn={0})")
.groupSearchBase("OU=Account Groups,OU=ITS Security")
.groupSearchFilter("(cn=AD-this-is-a-specific-group)")
.contextSource(contextSource());
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.anyRequest().fullyAuthenticated()
.and()
.formLogin();
}
}
Большое спасибо за этот комментарий. Мой вызов 'getGroupMembershipRoles' всегда возвращает List of size (0). Какое требование требуется для получения полномочий здесь? – BigDong
Как я вижу в своем проекте, единственным требованием является то, что ваш LDAP-сервер должен иметь ту же информацию, что и вы, в двух параметрах userDn и имени пользователя. Таким образом, userDn должен предоставить полную Dn для пользователя, и это Dn, и имя пользователя должно существовать на вашем LDAP-сервере. На самом деле я понимаю, что вам может понадобиться добавить параметр «groupSearchBase» ->, который просто «» в приведенном выше примере.Вы можете добавить groupSearchBase, если хотите, в строке 'DefaultLdapAuthoritiesPopulator populi = new DefaultLdapAuthoritiesPopulator (contextSource(), groupSearchBase) {' – Invest