Grails springsecurity Вход в LDAP, как ограничить пользователя по подгруппам?

Еще один вопрос новичка о реализации ядра/ldap grails-spring-security. (Grails 2.4.4 spring-security-core-2.0.0 spring-security-ldap-2.0.1)

Я настроил сервер openLdap (локально для теста) и из моего приложения grails, аутентифицированный пользователь с единственным LDAP, в базе данных не хранится информация о пользователях/ролях, все из LDAP (это требование в любом случае)

До сих пор я справился с аутентификацией всех пользователей ldap по их UID и паролю, следующие шаги будут заключаться в том, как еще больше ограничить пользователей по группам ldap?

Чтобы было ясно, моя структура LDAP теперь выглядит так:

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

Прямо сейчас все мои пользователи 01 ~ 05 могут войти в систему, используя свой пароль. Как мне настроить, чтобы только пользователи группы 01 (пользователи 01 и 02) могли войти в систему? Предполагая:

  • Я не забочусь о большей детализации роли только для чтения и т. д., просто войдите в систему успешно или неудачно.
  • Все пользователи 01~05 не имеют атрибута memberOf, эта информация есть только в записях групп (именно так настроен корпоративный LDAP).

Я экспериментировал с этим в моем Config.groovy, но я думаю, что это не делает то, что я думал, что он будет делать:

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

Пожалуйста помоги!


person alchn    schedule 17.04.2018    source источник


Ответы (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-адресов.

person alchn    schedule 20.04.2018