2011-01-18 9 views
7

Estoy usando Spring Security 3.0.0 y RememberMe persistente. Cuando el servidor se reinicia y todavía hay una ventana del navegador abierta,, necesitamos poder seguir usando la aplicación sin tener que iniciar sesión, si se selecciona "Recordarme".Spring RememberMe processAutoLoginCookie

Obtengo una org.springframework.security.web.authentication.rememberme.CookieTheftException: No coinciden las coincidencias token (Serie/token) no válidas. Implica un ataque previo de robo de cookies, cuando trato de continuar usando la aplicación después de reiniciar el servidor. Lo que noto es que el método processAutoLoginCookie recibe dos llamadas. No estoy seguro por qué. El comportamiento del método en sí parece ser correcto, es decir, actualiza el token en la base de datos y actualiza la cookie en el cliente.

Cualquier ayuda sobre esto sería apreciada.

Gracias.

+0

¿Ha encontrado la respuesta a este problema? – mmatloka

+1

Esto sucedió hace mucho tiempo y olvido los detalles. Pero en resumen, este era el problema: en mi caso particular, era porque estábamos usando Comet para largas encuestas. Por lo tanto, el método processAutoLoginCookie fue llamado una vez por el sondeo largo y por la carga regular de la página. Entonces, antes de que se recibiera la primera respuesta, la cookie había cambiado en la base de datos. De nuevo, olvido los detalles exactos, pero esto fue en pocas palabras. – smk

+0

He publicado una pregunta similar pero la he respondido por mi cuenta =). La solución que tengo se puede encontrar aquí -> [http://stackoverflow.com/questions/13393774/invalid-remember-me-token-series-token-mismatch-implies-previous-cookie-theft/13402874#13402874] (http://stackoverflow.com/questions/13393774/invalid-remember-me-token-series-token-mismatch-implies-previous-cookie-theft/13402874#13402874) – Warner

Respuesta

1

¡Obtenía exactamente el mismo problema! El proceso AutoCoginCookie fue llamado dos veces seguidas para que la primera llamada fuera exitosa, pero la segunda llamada falla porque la cookie se actualiza en la primera llamada.

Mi única solución fue crear la subclase PersistentTokenBasedRememberMeServices y anular el método processAutoLoginCookie. Tuve que copiar el código existente para processAutoLoginCookie y comentar el lanzamiento del CookieTheftException.

Nota: ¡Mi solución abrirá un agujero de seguridad!

Si está dispuesto a permitir el robo de cookies (mi sistema se usa internamente y no contiene datos confidenciales), entonces esta solución funcionará.

Como alternativa, también podría crear la subclase PersistentTokenBasedRememberMeServices y agregar una solución más robusta que aún compruebe las Excepciones de robo de cookies, pero que permita realizar las dos llamadas sucesivas a processAutoLoginCookie.

Cuestiones relacionadas