我有一个成功地采用了最新的弹簧安全核心Grails应用程序:2.0 RC4和弹簧security-ldap:2.0-RC2。用户可以使用 完美登录grails.plugin.springsecurity.ldap.search.base设置LDAP登录验证。ldap.rememberMe.usernameMapper.userDnBase(?的多个实例)(searchSubtree搜索功能)
没有为了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 ....它被映射到LDAP用于LDAP用户在返回时查找持久性cookie登录的应用程序。
这里是我的问题出现的地方,大多数用户在我们的LDAP系统中被隔离到不同的DIT中。例如,一些用途是在OU =的工作人员,OU =人,DC = sitcudy,DC = EDU,而其他用户在OU =学生,OU =人,DC = sitcudy,DC = EDU因此,由于记住了我的映射,在返回到应用程序后,一旦验证了cookie,代码就会尝试以这种格式绑定用户,其中包含用户绑定的用户,其中包括用户名,密码,不存在。什么确实存在是UID = reuben_marcus,OU =员工,OU =人,DC = sitcudy,DC = EDU因此cookie将被破坏,登录(IS_AUTHENTICATED_REMEMBERED)永远不会发生。
如果我更改grails.plugin.springsecurity.ldap.rememberMe.usernameMapper。userDnBase 到OU =的工作人员,OU =人,DC = sitcudy,DC = EDU的记得我的功能可以完美运行所有工作人员,但它并不适用于所有其他人的工作 - 学生,教师等。
在下面的问题,我在这个问题上的主要设置为: grails.plugin.springsecurity.ldap.rememberMe.usernameMapper.userDnBase
由于这只是一个映射,有ISN” t多个配额userDNBases或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'