Grails — подключаемый модуль безопасности Spring ldap: помните, что я не работаю

У меня есть приложение Grails с установленным подключаемым модулем spring-security-ldap, настроенным с использованием конкретных параметров Active Directory.

  • Версия Grails: 2.1.1.
  • версия плагина spring-security-core: 2.0-RC2
  • версия плагина spring-security-ldap: 2.0-RC2

Все работает нормально: пользователи входят в приложение, проверяя Active Directory, и их группы извлекаются для управления доступом к различным страницам.

Моя проблема: опция "запомнить меня" не работает. Я настроил приложение для использования опции «запомнить меня» и запустил команду s2-create-persistent-token. Я также активировал определенные следы. Все работает нормально: пользователь успешно авторизуется в приложении с включенной опцией «запомнить меня», токен создается и cookie отправляется клиенту. Пользователь закрывает браузер, а затем снова открывает его. На этом этапе приложение успешно проверяет, что пользователь в файле cookie совпадает с пользователем в постоянном токене. Тогда я могу увидеть это в журнале

userdetails.LdapUserDetailsManager  - Loading user 'sAMAccountName' with DN 'cn=sAMAccountName,dc=company,dc=country'
rememberme.PersistentTokenBasedRememberMeServices  - Remember-me login was valid but corresponding user not found.
Message: User sAMAccountName not found
   Line | Method
->>  49 | doFilter in grails.plugin.springsecurity.web.authentication.RequestHolderAuthenticationFilter
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
|    82 | doFilter in grails.plugin.springsecurity.web.authentication.logout.MutableLogoutFilter
|   886 | runTask  in java.util.concurrent.ThreadPoolExecutor$Worker
|   908 | run      in     ''
^   619 | run . .  in java.lang.Thread
Caused by NameNotFoundException: [LDAP: error code 32 - 0000208D: NameErr: DSID-031001CD, problem 2001 (NO_OBJECT), data 0, best match of:
    'DC=company,DC=country'

Первая строка журнала показывает недопустимое DN для пользователя. DN для пользователя выглядит примерно так

cn=название,ou=группа,ou=супергруппа,dc=компания,dc=< я>страна

Может проблема в этом? Как я могу это решить?

Моя конфигурация

// Spring Security
grails.plugin.springsecurity.logout.postOnly = false

// Spring Security LDAP
grails.plugin.springsecurity.ldap.context.managerDn = 'CN="a user",OU="a group",DC="company",DC="country"'
grails.plugin.springsecurity.ldap.context.managerPassword = '"password"'
grails.plugin.springsecurity.ldap.context.server = 'ldap://"server":389'
grails.plugin.springsecurity.ldap.authorities.ignorePartialResultException = true
grails.plugin.springsecurity.ldap.search.base = 'dc="company",dc="country"'
grails.plugin.springsecurity.ldap.search.filter="sAMAccountName={0}"
grails.plugin.springsecurity.ldap.search.searchSubtree = true
grails.plugin.springsecurity.ldap.auth.hideUserNotFoundExceptions = false
grails.plugin.springsecurity.ldap.search.attributesToReturn = ['dn', 'cn', 'ou', 'givenName', 'sn', 'department']
grails.plugin.springsecurity.ldap.authenticator.attributesToReturn = ['dn', 'cn', 'ou', 'givenName', 'sn', 'department']
grails.plugin.springsecurity.providerNames = ['ldapAuthProvider','anonymousAuthenticationProvider', 'rememberMeAuthenticationProvider']

// role-specific LDAP config
grails.plugin.springsecurity.ldap.authorities.retrieveGroupRoles = true
grails.plugin.springsecurity.ldap.authorities.groupSearchBase = 'dc="company",dc="country"'
grails.plugin.springsecurity.ldap.authorities.groupSearchFilter = '(member:1.2.840.113556.1.4.1941:={0})' // Active Directory specific


grails.plugin.springsecurity.successHandler.defaultTargetUrl = '/home'

grails.plugin.springsecurity.rememberMe.persistent = true
grails.plugin.springsecurity.rememberMe.persistentToken.domainClassName = 'censo.auth.PersistentLogin'
grails.plugin.springsecurity.ldap.useRememberMe = true
grails.plugin.springsecurity.ldap.rememberMe.detailsManager.groupMemberAttributeName = 'member'
grails.plugin.springsecurity.ldap.rememberMe.detailsManager.groupRoleAttribute = 'CN'
grails.plugin.springsecurity.ldap.rememberMe.detailsManager.groupSearchBase = 'OU="another group",dc="company",dc="country"'
grails.plugin.springsecurity.ldap.rememberMe.detailsManager.passwordAttributeName = 'userPassword'
grails.plugin.springsecurity.ldap.rememberMe.usernameMapper.userDnBase = 'dc="company",dc="country"'
grails.plugin.springsecurity.ldap.rememberMe.usernameMapper.usernameAttribute = 'cn'
grails.plugin.springsecurity.ldap.rememberMe.detailsManager.attributesToRetrieve = null

заранее спасибо


person Dani_Bcn    schedule 04.03.2014    source источник
comment
Я описал обходной путь для подобной проблемы здесь: stackoverflow.com/a/28459279/1345116   -  person mordka    schedule 11.02.2015