spring-security - 如何深入LDAP树中找到可以在spring ldap security中进行身份验证的用户
问题描述
我想使用 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");
}
谢谢
解决方案
您需要使用userSearchFilter()
anduserSearchBase()
而不是userDnPatterns()
.
userDnPatterns
尝试通过替换提供的模式中的用户登录名来匹配 DN,并附加来自 LDAP url 的基数。如果您的所有用户都存储在目录中的单个节点下,这是可以的。
userSearchFilter()
另一方面,可用于匹配常规请求中的登录名,在SUBTREE
特定基础下搜索树(默认 SearchScope = )。userSearchBase()
可以选择用于设置用户条目所在的分支 rdn,并从该分支 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
推荐阅读
- python-3.x - Python3 上的图像模块问题
- linux - 无法使用 OpenSSL 交叉编译 PostgreSQL,失败
未找到 - 尽管指定了包含搜索路径 - quantlib - 安装 QuantLib-Python 时 pipenv 锁定失败
- spring - 使用单声道
在 if 语句中 - c# - 如何执行取决于 .exe 位置的文件路径
- reactjs - 在不使用 Hooks 的情况下,在 Reactjs 中从头开始创建汉堡菜单的最佳方法是什么?
- c# - .net5 升级后 Azure 函数无法创建 Microsoft.Extensions.Logging.Abstractions.dll
- python - 我正在尝试使用字典作为底层数据结构来创建一个简单的文件系统。但是我遇到了访问密钥的问题
- postgresql - PostgreSQL ALTER VIEW 重写更改 AND/OR 含义
- excel - Excel 损坏诊断资源\工具