1

最新のspring-security-core:2.0-RC4およびspring-security-ldap:2.0-RC2を正常に使用している Grails アプリケーションがあります。ユーザーは LDAP ログイン認証にgrails.plugin.springsecurity.ldap.search.base設定を使用して完全にログインできます。

rememberMe userDnBase (マッパー) には別の設定があり、その設定は grails.plugin.springsecurity.ldap.rememberMe.usernameMapper.userDnBaseです。

LDAP 認証grails.plugin.springsecurity.ldap.search.baseou=people,dc=sitcudy,dc=edu に設定されています。上記のように、true に設定したsearchSubtreeというプロパティがあるため、ログインは正常に機能します。残念ながら、searchSubtree設定は true を保持せず、コードの「remember-me」部分(.ldap.rememberMe )*内で一貫して実行されます。コードの記憶の部分では、ベース DN のマップである grails.plugin.springsecurity.ldap.rememberMe.usernameMapper.userDnBase を使用するため、 config.groovyファイル に文字列を入力します (認証部分と同じ)。のベース DN にマップするou=people,dc=sitcudy,dc=edu .... これは、永続 Cookie ログインのためにアプリケーションに戻るときに、LDAP ユーザー検索用の DN にマップされます。

ここで私の問題が発生します。ほとんどのユーザーは、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検索が許可されていないため.. 「remember-me」コードは、このベース DN 設定に該当しないユーザーをどのように見つけることになっていますか??

何か間違ったことをしているのだろうか、それとも「remember me」コードに複数のマッピング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'
4

1 に答える 1