使用Spring Security从LDAP加载组

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用Spring Security从LDAP加载组相关的知识,希望对你有一定的参考价值。

我需要在LDAP中授予属于组(ABCD)的用户的访问权限。我能够使用Spring LDAP安全性成功进行身份验证,但由于某种原因,未加载组成员身份。我尝试登录时收到“403 access Denied”错误。我确认用户的组不会填充到权限中。

SecurityContextHolder.getContext().getAuthentication().getAuthorities();

有没有办法可以将用户组加载到权限中?这是我的spring安全配置。

<security:http auto-config="true" use-expressions="true">
    <security:intercept-url pattern="/js/**"
        access="true" />
    <security:intercept-url pattern="/css/**"
        access="true" />
    <security:intercept-url pattern="/images/**"
        access="true" />

    <security:intercept-url pattern="/**"
        access="hasRole('ABCD')" />

</security:http>

<security:ldap-server id="ldapServer" url="${ldap.url}" />

<security:authentication-manager alias="authenticationManager">
    <security:ldap-authentication-provider
        server-ref="ldapServer" user-dn-pattern="uid={0},ou=people,o=xxxx.com"
        group-search-base="ou=groups,o=xxxx.com" />

</security:authentication-manager> 
答案

应该是这样的:

<security:ldap-server id="ldapServer" url="${ldap.url}/o=xxxx.com" />

<security:authentication-manager alias="authenticationManager">
            group-search-filter="member={0}"
            group-search-base="ou=groups"
            user-search-base="ou=people"
            user-search-filter="uid={0}"
</security:authentication-manager> 

主要问题是围绕group-search-filter,它应该包含来自attribute的一些user(带占位符),它指的是当前用户是其成员的组。

Spring Security Sample

以上是关于使用Spring Security从LDAP加载组的主要内容,如果未能解决你的问题,请参考以下文章

Grails:有条件地加载 Spring Security LDAP 插件

Spring Security Ldap,只登录指定组中的用户

Spring LdapAuthentication 和从本地数据库加载角色

如何将 Spring Security 从 ldap 更改为 ldap starttls

Spring Security Ldap Authentication Filter 中的大括号如何工作?

如何使用 ldap 和 spring security 从登录的用户那里获取电子邮件