У меня есть приложение Grails, которое успешно использует последние версии spring-security-core:2.0-RC4 и spring-security-ldap:2.0-RC2. . Пользователи могут без проблем входить в систему, используя настройку grails.plugin.springsecurity.ldap.search.base для аутентификации входа LDAP.
Существует другой параметр для элемента RememberMe userDnBase (сопоставитель), и этот параметр выглядит следующим образом: grails.plugin.springsecurity.ldap.rememberMe.usernameMapper.userDnBase
Для аутентификации LDAP grails.plugin.springsecurity.ldap.search.base установлено значение ou=people,dc=sitcudy,dc=eduсильный>. Как упоминалось выше, вход в систему работает нормально, потому что есть свойство с именем searchSubtree, для которого я установил значение true. К сожалению, параметр searchSubtree не является истинным и последовательно применяется в части кода «запомнить меня» (.ldap.rememberMe< /эм>)*. Часть кода для запоминания использует карту для базового DN, grails.plugin.springsecurity.ldap.rememberMe.usernameMapper.userDnBase, поэтому я вставил строку в файл config.groovy (тот же, что и для части аутентификации) для сопоставления с базовым DN ou=people,dc=sitcudy,dc =edu.... который сопоставляется с DN для пользователя LDAP, который ищет его при возвращении в приложение для входа в систему с постоянными файлами cookie.
Вот где возникает моя проблема: большинство пользователей разделены на разные DIT в нашей системе LDAP. Например, некоторые пользователи относятся к ou=staff,ou=people,dc=sitcudy,dc=edu, а другие — к ou=students. ,ou=people,dc=sitcudy,dc=edu поэтому из-за сопоставления «запомнить меня» при возврате в приложение после проверки файла cookie код пытается привязать пользователей в этом формате, uid=reuben_marcus,ou=people,dc=sitcudy,dc=edu, которого не существует. Что действительно существует, так это uid=reuben_marcus,ou=staff,ou=people,dc=sitcudy,dc=edu, поэтому файл cookie уничтожается, а логин (< em>IS_AUTHENTICATED_REMEMBERED) никогда не встречается.
Если я изменю grails.plugin.springsecurity.ldap.rememberMe.usernameMapper.userDnBase на ou=staff,ou=people,dc=sitcudy,dc =edu функция «запомнить меня» отлично работает для всех сотрудников, но не для всех остальных людей — студентов, преподавателей и т. д.
Основной параметр, о котором идет речь ниже для меня в этой проблеме: grails.plugin.springsecurity.ldap.rememberMe.usernameMapper.userDnBase
Поскольку это всего лишь сопоставление, и не допускается поиск по нескольким userDNBase или searchSubtree. Как код "запомнить меня" должен находить пользователей, которые не попадают в эту базовую настройку DN...??
Интересно, я делаю что-то не так, или это запрос функции, чтобы код «запомнить меня» имел параметры для нескольких сопоставлений userDNBases или разрешил ему иметь searchSubtree возможность поиска.
Соответствующие настройки из моего config.groovy:
grails.plugin.springsecurity.ldap.mapper.roleAttributes = 'sitPriRole,uid'
grails.plugin.springsecurity.ldap.context.managerDn = 'uid=SPS_bind,ou=People,dc=sitcudy,dc=edu'
grails.plugin.springsecurity.ldap.context.managerPassword = 'xxx'
grails.plugin.springsecurity.ldap.context.server = 'ldap://ds01.sitcudy.edu:389'
grails.plugin.springsecurity.ldap.authorities.groupSearchBase ='ou=Groups,dc=sitcudy,dc=edu'
grails.plugin.springsecurity.ldap.search.base = 'ou=People,dc=sitcudy,dc=edu'
grails.plugin.springsecurity.ldap.search.searchSubtree = true
grails.plugin.springsecurity.ldap.auth.hideUserNotFoundExceptions = false
grails.plugin.springsecurity.ldap.search.attributesToReturn = ['uid', 'sitPriRole', 'mail', 'displayName']
grails.plugin.springsecurity.providerNames = ['ldapAuthProvider', 'anonymousAuthenticationProvider', 'rememberMeAuthenticationProvider']
grails.plugin.springsecurity.ldap.authorities.retrieveGroupRoles = false
grails.plugin.springsecurity.ldap.authorities.retrieveDatabaseRoles = false
grails.plugin.springsecurity.password.algorithm = 'SHA-256'
grails.plugin.springsecurity.rememberMe.persistent = true
grails.plugin.springsecurity.rememberMe.persistentToken.domainClassName = 'od.PersistentLogin'
// role-specific LDAP config
// grails.plugin.springsecurity.ldap.useRememberMe = true
grails.plugin.springsecurity.ldap.rememberMe.detailsManager.attributesToRetrieve = null
grails.plugin.springsecurity.ldap.rememberMe.detailsManager.groupMemberAttributeName = 'uniquemember'
grails.plugin.springsecurity.ldap.rememberMe.detailsManager.groupRoleAttributeName = 'cn'
grails.plugin.springsecurity.ldap.rememberMe.detailsManager.groupSearchBase = 'ou=Groups,dc=sitcudy,dc=edu'
grails.plugin.springsecurity.ldap.rememberMe.detailsManager.passwordAttributeName = 'userPassword'
grails.plugin.springsecurity.ldap.rememberMe.usernameMapper.userDnBase = 'ou=People,dc=sitcudy,dc=edu'
grails.plugin.springsecurity.ldap.rememberMe.usernameMapper.usernameAttribute = 'uid'