是否有支持嵌套组的 Spring Security DefaultLdapAuthoritiesPopulator 实现?

Posted

技术标签:

【中文标题】是否有支持嵌套组的 Spring Security DefaultLdapAuthoritiesPopulator 实现?【英文标题】:Is there a Spring Security DefaultLdapAuthoritiesPopulator implementation that supports nested groups? 【发布时间】:2011-03-02 05:04:40 【问题描述】:

我正在尝试使用 Spring Security 来支持嵌套 LDAP 角色的 Pentaho-BI 服务器。我的组结构如下:

PentahoAdmins (群展) 成员:域管理员 域管理员 (群展) 成员:User1 User1(用户)

我想验证 User1 是否属于 PentahoAdmins 组,而无需直接将用户添加到该组。根据我的在线研究,Spring 的 DefaultLdapAuthoritiesPopulator 似乎不支持嵌套组。我确信可以创建一个支持组嵌套的子类,但是有人已经解决了这个问题并将其发布在开源项目中吗?

【问题讨论】:

出于好奇,您有没有找到解决此问题的方法?我也有同样的问题,急需解决方案。 我没有。我想我必须自己写,但我最终没有在生产中使用 Pentaho,所以我不必解决这个问题。 感谢您的回复。由于似乎不存在,因此我将努力将自己的内容放在一起,并在完成后发回这里。 仅供参考 此问题已在Spring Security JIRA中提出 现在有一个 NestedLdapAuthoritiesPopulator。看起来它应该有助于解决这个问题。 【参考方案1】:

如下配置 LDAP 权限填充器,它将与嵌套组一起使用:

<bean id="ldapAuthoritiesPopulator" class="org.springframework.security.ldap.userdetails.DefaultLdapAuthoritiesPopulator">
    <constructor-arg ref="ldapContextSource" />
    <constructor-arg value="OU=Resource,OU=Security Groups,OU=Administrative Area" /> <!-- group search base -->
    <property name="groupRoleAttribute" value="cn" /> <!-- cn is default, but setting it anyway so it's clear -->
    <property name="rolePrefix" value="" /> <!-- reset prefix, default is ROLE_ -->
    <property name="convertToUpperCase" value="false"/>
    <property name="searchSubtree" value="true" /> <!-- deep search -->
    <property name="groupSearchFilter" value="(&amp;(&amp;(objectClass=group)(objectCategory=CN=Group,CN=Schema,CN=Configuration,DC=company,DC=local))(&amp;(cn=RG-TRADE*)(member:1.2.840.113556.1.4.1941:=0)))" />
</bean>

groupSearchFilter 值表示:

objectClass=[group object class] AND objectCategory=[group object category] AND cn_name_of_group=RG-TRADE* AND member:here_magic_for_nested_groups=[user full dn]

【讨论】:

【参考方案2】:

我发现这个article 与 Microsoft 的 Active Directory 有关。搜索 LDAP_MATCHING_RULE_IN_CHAIN 或上面的链接将提供有关该主题的更多信息。这个想法是您可以在 Spring Security 配置中为父组和用户的 uid 添加组搜索过滤器:

(&(uid=0)(memberof:1.2.840.113556.1.4.1941:=CN=parentGroup,DC=mycompany,DC=com))

=~ This user is 0 and is in a group that is a member of our parent group.

我使用 Spring LDAP 使用只读上下文搜索 MS Active Directory 对此进行了测试,但我尚未在 Spring Security 中使用 group-search-filter 确认这一点。我希望这会有所帮助。

【讨论】:

以上是关于是否有支持嵌套组的 Spring Security DefaultLdapAuthoritiesPopulator 实现?的主要内容,如果未能解决你的问题,请参考以下文章

Spring Security 中会话 cookie 的同站点标志

Spring Security 是不是支持 Windows Live ID?

Spring Security Saml 2.0 是不是支持断言级别加密和 AES-256 作为加密算法?

使用 Spring Security 在同一个 URI 映射上同时支持 Basic 和 Digest 身份验证

Spring Security应用开发(16)基于表达式的访问控制

spring security client_credentials grant_type - 支持刷新令牌