我有一個成功地採用了最新的彈簧安全核心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'