仅来自特定组的用户的LDAP Spring AD登录

问题描述 投票:0回答:1

我正在使用LDAP / AD为来自特定组的用户登录而苦苦挣扎

现在不幸的是,公司中的任何用户都可以登录,而无需知道他是否属于不属于该用户的组。

我的SpringSecurity配置的一部分:

protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth
.ldapAuthentication()
.userDetailsContextMapper(new InetOrgPersonContextMapper())
.userSearchFilter("(sAMAccountName={0})")
.userSearchBase("OU=OU_USERS,dc=test1,dc=test2")
.groupSearchBase("OU=OU_Application,OU=OU_GROUPS,dc=test1,dc=test2")                
.groupSearchFilter("(&(objectCategory=Group)(memberOf=cn=G_Cpge,OU=OU_Application,OU=OU_GROUPS,dc=test1,dc=test2))")
.contextSource()
.url("ldap://XXXXXXXX")
.port(389)
.managerDn("CN=cpge,OU=OU_Services,OU=OU_USERS,dc=test1,dc=test2")
.managerPassword("password");
} 

问题是设置适当的.groupSearchFilter在这种情况下,找到指定组中的给定用户G_Cpge

.groupSearchFilter("(&(objectCategory=Group)(memberOf=cn=G_Cpge,OU=OU_Application,OU=OU_GROUPS,dc=test1,dc=test2))")

当前来自任何组的任何用户都可以登录:/欢迎提出任何想法。

spring security active-directory ldap spring-ldap
1个回答
0
投票

我也在几乎相同的问题上苦苦挣扎。首先-您的用户搜索过滤器应类似于这样,因此您不再需要组搜索过滤器

.userSearchFilter("(&(sAMAccountName={0})(memberOf=cn=G_Cpge,OU=OU_Application,OU=OU_GROUPS,dc=test1,dc=test2))")

但是此解决方案不适用于我。您需要一个拦截器来应用组条件,特别是如果您需要使用属性而不是uid时。

DefaultLdapAuthoritiesPopulator帮助您拦截身份验证过程并获取用户组。

请检查这两个答案。实现ldapAuthoritiesPopulator; https://stackoverflow.com/a/38319628/1926298

获取特定用户的组;https://stackoverflow.com/a/49869085/1926298

谢谢

© www.soinside.com 2019 - 2024. All rights reserved.