首页 文章

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

提问于
浏览
0

使用grails-spring-security核心/ ldap实现的另一个新手问题 . (Grails 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'属性,此信息仅在Groups条目中(这就是corp LDAP的设置方式) .

我在Config.groovy中尝试过这个,但我猜它没有按照我的想法做到:

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

请帮忙!

1 回答

  • 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_'和up-case是自动的,但如果需要可以使用其他配置设置进行更改(我不介意) .

    然后,在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映射来控制访问的粒度 .

相关问题