如何深入 LDAP 树以找到可以在 spring ldap 安全中进行身份验证的用户

How to deep into the LDAP tree to find a user who can authenticate in spring ldap security

我想使用 spring 安全 ldap 身份验证。但是我想递归遍历 ldap 树。不幸的是,我只能找到一个用户级别或深度。

例如,我的用户树如下:

ouUsers:有用户(user1、user2 等)和子树(ouGenel、ouYatay)。

而子树有子树和用户。

我想递归遍历 ldap 树以在 spring 安全项目中进行身份验证。

我的 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");
}

谢谢

您需要使用 userSearchFilter()userSearchBase() 而不是 userDnPatterns()

  • userDnPatterns 尝试通过在提供的模式中替换用户登录名来匹配 DN,并附加来自 LDAP url 的基础。

    This is OK if all your users are stored under a single node in the directory.

  • 另一方面,
  • 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