【发布时间】:2023-03-18 00:49:01
【问题描述】:
我有一个成功使用最新的 spring-security-core:2.0-RC4 和 spring-security-ldap 的 Grails 应用程序: 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=教育。如上所述 - 登录工作正常,因为我已将一个名为 searchSubtree 的属性设置为 true。不幸的是,searchSubtree 设置并不成立,并且在代码的“记住我”部分中始终如一地执行 (.ldap.rememberMe)*。代码的 remember-me 部分使用基本 DN 的映射,grails.plugin.springsecurity.ldap.rememberMe.usernameMapper.userDnBase 所以我在 config.groovy 文件中放入了一个字符串(与身份验证部分相同)以映射到 ou= 的基本 DN 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 记住我功能适用于所有员工,但不适用于所有其他员工人 - 学生、教师等。
在本期中,对我而言,以下主要设置是: grails.plugin.springsecurity.ldap.rememberMe.usernameMapper.userDnBase
因为这只是一个映射,并且不允许多个 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'
【问题讨论】:
标签: grails spring-security grails-plugin remember-me spring-security-ldap