Spring Boot Security #3| Remember Me Persistent Token
Persistent Token es la segunda forma de conseguir el remember con Spring Boot Security. Continuaremos donde dejamos el post anterior. spring-boot-security-remember-me-2.
Tenemos un proyecto MVC con Spring Boot + security donde ponemos una cookie en sesión para utilizar la característica “remember-me”.
El problema es que esta cookie contiene un token con el usuario y la contraseña y si alguien intercepta este cookie pude iniciar sesión y suplantar nuestra identidad.
La “solución” para esto es utilizar una base de datos para alamcenar el usuario, un valor llamado “series”, el token y la ultima vez que se uso..
Ademas crearemos una cookie en el navegador pero esta es mas compleja. Estará compuesta por “series” (aleatorio), y token de seguridad.
Cuando el usuario intente acceder a la pagina web el navegador detectara la cookie y comparar el valor de “series”, token y username contra la base de datos y dara acceso a la aplicacion.
Configuracion
Es necesario tener el proyecto trabajado en el post anterior. SimpleRememberMe.
Despues de tener el proyecto y la estructura necesaria debes crear una tabla en la base de datos para mantener la persistencia de los logins. La documentacion de spring tiene la estructura de la tabla.
https://docs.spring.io/spring-security/site/docs/5.0.0.BUILD-SNAPSHOT/reference/htmlsingle/#remember-me-persistent-token
create table persistent_logins(username varchar(50) not null,
series varchar(64) primary key,
token varchar(64) not null,
last_used timestamp not null
);
En application.properties es necesario incluir la siguiente linea para especificar que el datasource es manejado por hibernate.
spring.jpa.properties.hibernate.current_session_context_class=org.springframework.orm.hibernate5.SpringSessionContext
Codigo
A nivel de código solo hay que modificar la clase de configuración de la seguridad. (WebSecurityConfig)
- Add the data source variable with autowired anotación.
- Create el metodo de persistencia para el repositorio de los tokens.
- Borra la configuración del cookie y agrega ese metodo de persistencia a la seguridad de remember-me
Test
Para probar este metodo de “remember-me” lo haremos de la manera que con el metodo anterior.
- Iniciar sesión con la casilla de recordarme seleccionada
- Verifica que la cookie en el navegador existe
- Verifica que se haya creado un registro en la tabla de persistencia
- Cierra el navegador y ábrelo de nuevo. Intenta acceder a una URL protegida.
- Éxito?
- Cierra sesión y verifica que el registro y la cookie se haya eliminado correctamente de la base de datos y el navegador.
Github repository:
https://github.com/cruizg93/SpringBoot-Security-MySql/tree/PersistentRememberMe