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