我正在使用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))")
当前来自任何组的任何用户都可以登录:/欢迎提出任何想法。
我也在几乎相同的问题上苦苦挣扎。首先-您的用户搜索过滤器应类似于这样,因此您不再需要组搜索过滤器
.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
谢谢