En la anterior entrada del blog, hablamos de cómo configurar una autenticación OAuth2 sencilla. Sin embargo, nuestra implementación tiene un fallo importante: estamos utilizando un almacén de tokens en memoria.

Los almacenes de tokens en memoria sólo deben utilizarse durante el desarrollo o si tu aplicación tiene un único servidor, ya que no puedes compartirlos fácilmente entre nodos y, en caso de reinicio del servidor, perderás todos los tokens de acceso que haya en él.

Spring-security-oauth2 ya tiene soporte integrado para JDBC y JWT. Sin embargo, si necesitas guardar tus tokens en algún otro lugar, tienes que crear tu propio almacén de tokens de seguridad de Spring. Por desgracia, la implementación de tal cosa no es una tarea trivial, y espero que la siguiente receta le ahorrará un par de horas de trabajo.

Empecemos por crear las dos entidades responsables de almacenar tu token de acceso y refresco, y sus respectivos repositorios:

 

 

 

 

Tenga en cuenta que Autenticación OAuth2 es una interfaz, por lo que no tengo otra opción que serializar el objeto para almacenarlo en la base de datos. Aquí está la clase responsable de serializarlo/deserializarlo:

 

Ahora, por fin podemos crear nuestro spring oauth2 almacén de fichas. Para ello, todo lo que necesitamos es implementar la larga lista de métodos del método org.springframework.security.oauth2.provider.token.TokenStore:

 

Por último, podemos modificar ligeramente nuestro SecurityConfig que hemos creado en el artículo anterior. Ahora devolverá una instancia de CouchbaseTokenStore en lugar de InMemoryTokenStore:

 

Aquí está la versión completa del SecurityConfig clase:

 

Bien hecho. Eso es todo lo que teníamos que hacer.

Su token de acceso tendrá el siguiente aspecto en su base de datos:

 

He utilizado de caelwinner proyecto como referencia, he aquí mi especial agradecimiento a él.

Si tiene alguna pregunta, no dude en tuitearme en @deniswsrosa

 

 

Autor

Publicado por Denis Rosa, Defensor del Desarrollador, Couchbase

Denis Rosa es un Developer Advocate para Couchbase y vive en Munich - Alemania. Tiene una sólida experiencia como ingeniero de software y habla con fluidez Java, Python, Scala y Javascript. A Denis le gusta escribir sobre búsqueda, Big Data, AI, Microservicios y todo lo que pueda ayudar a los desarrolladores a hacer una aplicación hermosa, más rápida, estable y escalable.

1 Comentarios

  1. Hola Denis,
    En primer lugar, gracias por el tutorial tan breve pero conciso. Aunque tiene más de un año, está bien explicado, y debo reconocer que eres un excelente profesor.
    Por favor, tengo una pregunta y una petición que hacer. Es posible añadir JWT a esta implementación OAuth2, y si sí,¿puede usted por favor proporcionar una guía?
    A la espera de una respuesta.
    Muchas gracias.

Dejar una respuesta