弹簧安全 LDAP。使用 SearchControls.OBJECT_SCOPE 代替 SearchControls.SUBTREE_SCOPE

Posted

技术标签:

【中文标题】弹簧安全 LDAP。使用 SearchControls.OBJECT_SCOPE 代替 SearchControls.SUBTREE_SCOPE【英文标题】:Spring Security LDAP. The SearchControls.OBJECT_SCOPE is used instead of SearchControls.SUBTREE_SCOPE 【发布时间】:2020-06-22 20:31:40 【问题描述】:

spring-boot-starter-security 2.2.4.RELEASE,jdk 11

org.springframework.security.ldap.SpringSecurityLdapTemplate.searchForMultipleAttributeValues方法用于web请求认证时的组搜索。请求通过了认证。但是,没有找到用户组。

它使用范围为 SearchControls.OBJECT_SCOPE 的搜索控件。通过以下方法准备的搜索控件 com.sun.jndi.toolkit.ctx.LdapCtx.c_getAttributes.(Name name, String[] attrIds, 续续) 结果没有找到任何组。 如果我使用具有相同输入(组搜索库、组搜索过滤器、组角色属性)但使用 SearchControls.SUBTREE_SCOPE 的 ldap 模板进行搜索,则可以找到所有组。

我需要更改 org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder 配置以使用 SearchControls.SUBTREE_SCOPE 进行组搜索?

谢谢!

【问题讨论】:

您是直接拨打SpringSecurityLdapTemplate 还是通过LdapAuthoritiesPopulator 之类的方式拨打电话? 是的。我直接创建了模板来检查它使用相同配置返回的内容。 SpringSecurityLdapTemplate 默认使用SUBTREE_SCOPE,所以我想我不清楚你在问什么。如果您直接构建它,那么您可以随时调用setSearchControls 使用您需要的任何东西。 【参考方案1】:

这是一个配置问题。原始组搜索基指向根节点。这就是为什么使用 SearchControls.SUBTREE_SCOPE 通过 LDAP 模板搜索允许从子节点查找组的原因。不知道为什么 com.sun.jndi.toolkit.ctx.LdapCtx.c_getAttributes 使用 SearchControls.OBJECT_SCOPE 作为默认值。 将群组搜索库更改为特定群组节点即可解决此问题。

【讨论】:

以上是关于弹簧安全 LDAP。使用 SearchControls.OBJECT_SCOPE 代替 SearchControls.SUBTREE_SCOPE的主要内容,如果未能解决你的问题,请参考以下文章

没有弹簧安全性的 ldap 和 JWT 身份验证

spring-boot 弹簧安全 angularjs

弹簧,属性文件,空值

Spring Security 和 LDAP MD5 认证

弹簧 websocket 没有弹簧安全

有没有办法在没有弹簧安全的情况下使用弹簧过滤器链?