我有一个成功使用最新spring-security-core:2.0-RC4和spring-security-ldap:2.0-RC2的 Grails 应用程序。用户可以使用 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 )*中始终如一地执行。代码的 remember-me 部分使用基本 DN 的映射 grails.plugin.springsecurity.ldap.rememberMe.usernameMapper.userDnBase所以我在config.groovy文件 中放入一个字符串(与身份验证部分相同)映射到的基本 DNou=people,dc=sitcudy,dc=edu .... 映射到 DN 以便 LDAP 用户在返回应用程序以进行持久性 cookie 登录时查找。
这就是我的问题所在,大多数用户在我们的 LDAP 系统中被隔离到不同的 DIT 中。例如,某些用途在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 被销毁并且登录(IS_AUTHENTICATED_REMEMBERED)永远不会发生。
如果我将grails.plugin.springsecurity.ldap.rememberMe.usernameMapper.userDnBase更改 为ou=staff,ou=people,dc=sitcudy,dc=edu,remember me 功能对所有员工都很有效,但不适用于所有其他人——学生、教师等。
在这个问题上,我下面的主要设置是: grails.plugin.springsecurity.ldap.rememberMe.usernameMapper.userDnBase
由于这只是一个映射,并且不允许多个userDNBases或searchSubtree搜索.. 'remember-me' 代码应该如何找到不属于此基本 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'