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

时间:2019-07-01 06:18:37

标签: spring-security active-directory ldap spring-ldap spring-security-ldap

我想使用Spring Security ldap认证。但是我想递归遍历ldap树。不幸的是,我只能找到一个级别或深度的用户。

例如,我的用户树如下所示:

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

并且子树具有子树和用户。

我想递归遍历ldap树以在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 个答案:

答案 0 :(得分:1)

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

  • userDnPatterns尝试通过以提供的模式替换用户登录名并从LDAP URL追加基本来匹配DN。

      

    如果所有用户都存储在单个节点下中,则可以   目录。

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