CookieTheftException с PersistentTokenBasedRememberMeServices - PullRequest
2 голосов
/ 01 октября 2009

Я использую приложение PersistentTokenBasedRememberMeServices (Spring Security 2.04) в Grails в сочетании с OpenIDAuthenticationProcessingFilter. Конфигурация выглядит следующим образом ( DSL Grails DSL эквивалентен Spring resource.xml, но его должно быть довольно легко адаптировать):

customTokenRepository(JdbcTokenRepositoryImpl)
{
  dataSource = ref('dataSource')
}

rememberMeServices(PersistentTokenBasedRememberMeServices) {
    userDetailsService = ref('userDetailsService')
    key = securityConf.rememberMeKey
    cookieName = securityConf.cookieName
    alwaysRemember = securityConf.alwaysRemember
    tokenValiditySeconds = securityConf.tokenValiditySeconds
    parameter = securityConf.parameter
    tokenRepository = customTokenRepository
}

openIDAuthProvider(org.codehaus.groovy.grails.plugins.springsecurity.openid.GrailsOpenIdAuthenticationProvider) {
    userDetailsService = ref('userDetailsService')
}

openIDStore(org.openid4java.consumer.InMemoryConsumerAssociationStore)

openIDNonceVerifier(org.openid4java.consumer.InMemoryNonceVerifier, securityConf.openIdNonceMaxSeconds) // 300 seconds

openIDConsumerManager(org.openid4java.consumer.ConsumerManager) {
    nonceVerifier = openIDNonceVerifier
}

openIDConsumer(org.springframework.security.ui.openid.consumers.OpenID4JavaConsumer, openIDConsumerManager)

openIDAuthenticationProcessingFilter(org.springframework.security.ui.openid.OpenIDAuthenticationProcessingFilter) {
    authenticationManager = ref('authenticationManager')
    authenticationFailureUrl = securityConf.authenticationFailureUrl //'/login/authfail?login_error=1' // /spring_security_login?login_error
    defaultTargetUrl = securityConf.defaultTargetUrl // '/'
    filterProcessesUrl = '/j_spring_openid_security_check' // not configurable
    rememberMeServices = ref('rememberMeServices')
    consumer = openIDConsumer
    targetUrlResolver = customTargetUrlResolver
}

После аутентификации пользователя все в порядке, пока выданный ему cookie-файл не будет использован впервые, например, после перезапуска контейнера (см. здесь ).

Самый первый запрос с использованием файла cookie, кажется, всегда в порядке, но после того, как файл cookie был обновлен с новой датой и, что наиболее важно, с новым токеном, последующие запросы завершатся в здесь . Как будто браузер все еще запрашивает ресурсы, используя старую версию куки, содержащую старый токен. Я полностью сбит с толку, почему это происходит. Есть предложения?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...