Grails springsecurity LDAP登录,如何按子组限制用户?

Grails springsecurity LDAP Login, how to limit user by subgroups?

另一个关于 grails-spring-security core/ldap 实现的新手问题。 (圣杯 2.4.4 spring-安全核心-2.0.0 spring-安全-ldap-2.0.1)

我设置了一个 openLdap 服务器(本地测试),从我的 grails 应用程序,经过身份验证的用户只有 LDAP,没有数据库存储 users/roles 信息,一切都来自 LDAP(这是要求无论如何)

到目前为止,我已经可以通过 UID 和密码对 所有 ldap 用户进行身份验证,接下来的步骤是,如何通过 ldap 组进一步限制用户?

明确地说,我的 LDAP 结构现在如下所示:

domain01, com
    - Groups
        - group01 (member: user01, user02)
        - group02 (member: user03, user04, user05)
        - superUsers
    - Users
        - user01
        - user02
        - user03
        - user04
        - user05

现在我所有的用户 01 ~ 05 都可以使用他们的密码登录。如何配置才能让group01下的用户(user01和02)可以登录? 假设:

我已经在 Config.groovy 中对此进行了试验,但我想它并没有按照我的预期进行:

grails.plugin.springsecurity.ldap.authorities.groupSearchBase = 'cn=group01,ou=Groups,dc=domain01,dc=com'

请帮忙!

我想通了。

我的Config.groovy需要这些:

grails.plugin.springsecurity.ldap.authorities.groupSearchBase = 'ou=group01,dc=domain01,dc=com'
grails.plugin.springsecurity.ldap.authorities.retrieveGroupRoles = true
grails.plugin.springsecurity.ldap.authorities.groupRoleAttribute='cn'
grails.plugin.springsecurity.ldap.authorities.groupSearchFilter = 'member={0}'

用户角色将在他们通过身份验证后从 LDAP 分组推断为 'ROLE_GROUP01'。前缀 'ROLE_' 和大写是自动的,但如果需要可以使用其他配置设置进行更改(我不介意)。

然后,同样在 Config.groovy 中,控制用户可以使用 interceptUrlMap 访问的内容:

grails.plugin.springsecurity.securityConfigType = 'InterceptUrlMap'
grails.plugin.springsecurity.interceptUrlMap = [
    '/':                ['IS_AUTHENTICATED_FULLY'],
    '/error':           ['permitAll'],
    '/index':           ['permitAll'],
    '/index.gsp':       ['permitAll'],
    '/assets/**':       ['permitAll'],  
    '/**/js/**':        ['permitAll'],
    '/**/css/**':       ['permitAll'],
    '/**/images/**':    ['permitAll'],
    '/**/favicon.ico':  ['permitAll'],
    '/login':           ['permitAll'],
    '/login/**':        ['permitAll'],
    '/logout':          ['permitAll'],
    '/logout/**':       ['permitAll'],
    '/product':         ['ROLE_GROUP01'],
    '/product/**':      ['ROLE_GROUP01'],
    '/marketing':       ['ROLE_GROUP01'],
    '/marketing/**':    ['ROLE_GROUP01']
]

您可以使用自己的 url 映射来控制访问的粒度。