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

时间:2018-04-17 07:45:35

标签: authentication grails login spring-security spring-security-ldap

grails-spring-security core / ldap实现的另一个新手问题。 (Grails 2.4.4    弹簧安全核心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 个答案:

答案 0 :(得分: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']
]

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