Spring Boot Security #3| Remember Me Persistent Token

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.

Application properties con el data source especificado

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)

  1. Add the data source variable with autowired anotación.
  2. Create el metodo de persistencia para el repositorio de los tokens.
  3. Borra la configuración del cookie y agrega ese metodo de persistencia a la seguridad de remember-me
Security Configuration for Remember me Persisten token

Test

Para probar este metodo de “remember-me” lo haremos de la manera que con el metodo anterior.

  1. Iniciar sesión con la casilla de recordarme seleccionada
  2. Verifica que la cookie en el navegador existe
  3. Verifica que se haya creado un registro en la tabla de persistencia
  4. Cierra el navegador y ábrelo de nuevo. Intenta acceder a una URL protegida.
  5. Éxito?
  6. 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

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *