Spring Boot Security #2 | Remember Me y Cookie de Sesión
Mantener una sesión abierta y evitar iniciar sesión cada vez que visites una pagina es algo esencial. Conocido como “Remember Me”, es una opción en el formulario de login que permite crear una cookie en el navegador para poder mantener la sesión abierta.
Esta cookie creada por Spring Security tiene la siguiente composición:
- username: Identifica el usuario que inicio sesión.
- expirationTime: El tiempo de vida de la cookie creada.
- MD5 hash: Contiene el valor hash de los dos atributos anteriores, username y expirationTime. ademas agrega el passwords y la llave predefinida.
Importante: Como saben la cookie contiene el username y password, por lo cual si alguno de estos cambia la cookie dejara de servir.
La mayor vulnerabilidad de este metodo es que si la cookie es interceptada, puede ser usara por algún tercero.
Como usar Remember Me
Nos basaremos en el anterior tutorial y utilizaremos ese código como ejemplo. Si no lo has visto te invito a que lo mires o lo descargues del repositorio de github
- Tutorial: http://cristianruizblog.com/spring-boot-security-login/
- Repositorio: https://github.com/cruizg93/SpringBoot-Security-MySql
Paso a Paso:
- Agrega la opción a tu formulario de login. en este caso en el archivo index.html
- Hay que indicarle a Spring Security que necesita generar la cookie “remember-me”. y borrar la cookie JSESSIONID cuando cierra sesión. Solamente hay que agregar la siguiente opción en configuración:
.rememberMe().key("uniqueAndSecret") logout(). deleteCookies("JSESSIONID")
Por Defecto el parámetro es “remeber-me” y la duración de dos semanas. Pero esto puede ser cambiado fácilmente asi:
.rememberMe().key("uniqueAndSecret") .tokenValiditySeconds(60) //valor de la cookie en segundo ej, 60 => min .rememberMeParameter("name-del-input")
De esa manera se configura la cookie para recordar sesión. En el video tutorial les mostrare como verificar el uso de la cookie.
Repositorio: https://github.com/cruizg93/SpringBoot-Security-MySql/compare/SimpleRememberMe?diff=unified