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

Posted

技术标签:

【中文标题】Grails springsecurity LDAP登录,如何按子组限制用户?【英文标题】:Grails springsecurity LDAP Login, how to limit user by subgroups? 【发布时间】:2018-09-27 02:10:14 【问题描述】:

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

我已经设置了一个 openLdap 服务器(在本地进行测试),并且从我的 grails 应用程序中,经过身份验证的用户只有 LDAP,没有数据库存储用户/角色信息,一切都来自 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)能够登录? 假设:

我不在乎提供更多粒度的只读角色等,只要登录成功或失败即可。 所有用户 01~05 没有“memberOf”属性,此信息仅在组条目中(这就是设置公司 LDAP 的方式)。

我在我的 Config.groovy 中对此进行了实验,但我想它并没有像我想象的那样做:

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

请帮忙!

【问题讨论】:

【参考方案1】:

我想通了。

在我的 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 映射来控制访问的粒度。

【讨论】:

以上是关于Grails springsecurity LDAP登录,如何按子组限制用户?的主要内容,如果未能解决你的问题,请参考以下文章

Grails:弹簧安全插件 - 错误 springsecurity.GormPersistentTokenRepository

Grails/SpringSecurity:如何在不被识别的情况下创建用户?

Grails,SpringSecurity - 如果未记录,则禁用重定向

Grails 3 - springSecurity reauthenticate 和 SessionRegistry

Grails、Vaadin 7 和 SpringSecurity:授权不起作用

Grails 3 - springSecurity 使用密码重新验证