Spring Security Core 1.2.7.3、Spring Security CAS 1.0.5、Spring Security LDAP 1.0.6 のプラグインを使用する Grails 2.2.3 のアプリがあります。
ロール、ユーザー ストレージ、ユーザー情報には LDAP を使用し、シングル サインオンには CAS を使用しています。初めて認証するとBadCredentials
例外 (「そのユーザー名とパスワードでユーザーを見つけることができません」という例外) が発生しますが、2 回目に試行すると正しく認証されます。
その例外をデバッグすると、実際には次のエラーが原因です。
org.jasig.cas.client.validation.TicketValidationException:
ticket 'my-ticket' does not match supplied service
このエラーの原因や修正方法を知っている人はいますか? resources.groovy の設定は次のとおりです。
initialDirContextFactory(DefaultSpringSecurityContextSource, "ldap://ldap.company.com:389") {
userDn = "CN=Admin,OU=Users,DC=company,DC=com"
password = "password"
}
ldapUserSearch(FilterBasedLdapUserSearch,
"OU=Users,DC=company,DC=com",
"employeeId={0}",
initialDirContextFactory) { }
ldapUserDetailsMapper(MyLdapUserDetailsContextMapper) { }
ldapAuthoritiesPopulator(DefaultLdapAuthoritiesPopulator,
initialDirContextFactory,
"ou=Groups,OU=Users,DC=company,DC=com") {
groupRoleAttribute = "cn"
groupSearchFilter = "member={0}"
rolePrefix = ""
searchSubtree = true
convertToUpperCase = true
ignorePartialResultException = true
}
userDetailsService(LdapUserDetailsService, ldapUserSearch, ldapAuthoritiesPopulator) {
userDetailsMapper = ref('ldapUserDetailsMapper')
}
そしてconfig.groovyの私の設定:
grails.plugins.springsecurity.cas.serverUrlPrefix = 'https://cas.company.com/cas'
grails.plugins.springsecurity.cas.loginUri = "/login"
grails.plugins.springsecurity.cas.serviceUrl = "${grails.serverURL}/j_spring_cas_security_check"
grails.plugins.springsecurity.providerNames = ['casAuthenticationProvider']
grails.plugins.springsecurity.defaultTargetUrl = '/'
grails.plugins.springsecurity.alwaysUseDefault = false