如何深入LDAP树中找到可以在spring ldap security中进行身份验证的用户
Posted
技术标签:
【中文标题】如何深入LDAP树中找到可以在spring ldap security中进行身份验证的用户【英文标题】:How to deep into the LDAP tree to find a user who can authenticate in spring ldap security 【发布时间】:2019-11-11 19:45:08 【问题描述】:我想使用 spring security ldap 身份验证。但是我想递归地遍历 ldap 树。不幸的是,我只能找到一个级别或深度的用户。
例如,我的用户树如下所示:
ouUsers:拥有用户(user1、user2 等)和子树(ouGenel、ouYatay)。
子树有子树和用户。
我想递归遍历ldap树在spring security项目中进行身份验证。
我的 spring 身份验证代码如下,我应该在我的代码中更改什么? :
@Override
public void configure(AuthenticationManagerBuilder auth) throws Exception
auth
.ldapAuthentication()
.userDnPatterns("CN=0,OU=ouUsers")
.groupSearchBase("ou=ouUsers")
.contextSource()
.url(url+"/"+base)
.managerDn(dn)
.managerPassword(password)
.and()
.passwordCompare()
.passwordEncoder(new LdapShaPasswordEncoder())
.passwordAttribute("sn");
谢谢
【问题讨论】:
【参考方案1】:您需要使用userSearchFilter()
和userSearchBase()
而不是userDnPatterns()
。
userDnPatterns
尝试通过替换提供的模式中的用户登录名来匹配 DN,并附加来自 LDAP url 的基数。
如果您的所有用户都存储在单个节点下 目录。
另一方面,userSearchFilter()
可用于匹配常规请求中的登录名,在特定基础下搜索树(默认 SearchScope =SUBTREE
)。 userSearchBase()
可以选择用于设置分支 rdn,用户条目所在的位置以及执行搜索的位置。如果未指定,则搜索包括从 LDAP url 的基本 dn 开始的整个目录。
用以下内容替换 userDnPatterns() 应该没问题:
.userSearchBase('ou=ouUsers')
.userSearchFilter('(cn=0)')
https://docs.spring.io/spring-security/site/docs/3.0.x/reference/ldap.html#d0e5940
【讨论】:
以上是关于如何深入LDAP树中找到可以在spring ldap security中进行身份验证的用户的主要内容,如果未能解决你的问题,请参考以下文章
Spring-WS WS-Security LDAP 身份验证