Cómo proteger Spring Boot con autenticación y autorización JWT
Hola estudiantes, aquí vamos a aprender sobre la implementación de seguridad de Spring con Spring Boot3.0 y JWT. Esto es una continuación de Spring Security parte 1: enlace allí discutimos sobre la implementación basada en roles de seguridad de Spring, en este discutiremos cómo implementar JWT.
JWT (JSON Web Tokens) es un estándar para representar reclamaciones de forma segura entre dos partes. Es un medio compacto y seguro para URL de representar reclamos que se transferirán entre dos partes. Un JWT consta de tres partes: un encabezado, una carga útil y una firma.

El encabezado consta de algoritmo y tipo de token, la carga útil consta de asunto, nombre, fecha emitida, Verificar firma es la combinación de encabezado codificado, carga útil y clave secreta. El token JWT es una combinación de estos tres
Spring Security se puede integrar con JWT para proteger las aplicaciones web generando, analizando y validando JWT.

La siguiente es una descripción general de cómo funciona la autenticación y autorización JWT en Spring Boot :
- Autenticación de usuario: cuando un usuario inicia sesión en el sistema, el servidor verifica las credenciales del usuario, como su nombre de usuario y contraseña. Si las credenciales son correctas, el servidor genera un JWT para el usuario y lo devuelve al cliente.
- Creación de JWT: el servidor crea un JWT codificando la información de identidad del usuario y otros datos necesarios, como el tiempo de vencimiento, en un objeto JSON. Luego, el objeto JSON se firma con una clave secreta o un par de claves pública/privada.
- Almacenamiento de tokens: el cliente almacena el JWT localmente, generalmente en una cookie o almacenamiento local.
- Autorización: para cada solicitud posterior, el cliente envía el JWT en el encabezado de la solicitud. El servidor verifica la firma del JWT y decodifica su contenido para extraer la información de identidad del usuario y otros detalles. Con base en esta información, el servidor puede autorizar al usuario a acceder a ciertos recursos o realizar ciertas acciones.
- Validación de token: el servidor también puede validar el JWT para asegurarse de que no haya sido manipulado y no haya caducado. Si el token no es válido, el servidor puede rechazar la solicitud o solicitar al usuario que inicie sesión nuevamente.
Paso 1: agregue las dependencias de JWT

Paso 2: Cree un punto final para autenticar y generar JWT


En el método CreateToken, estamos creando un token configurando reclamos, asunto, fecha de emisión y vencimiento, firma.
Paso 3: crea un filtro para validar JWT

cree una clase para el filtro y extienda con OncePerRequestFilter, anule el método doFilterInternal e invoque el token de autorización desde el encabezado. Valide el token extrayendo el nombre de usuario y la fecha de vencimiento del token. Este archivador se usa para validar el token JWT para cada llamada a la API.
Paso 4: Agregue la configuración para autorizar llamadas API

Cree una clase y agregue un método para autorizar, en el código anterior con acceso a los puntos finales "/products/new","/products/authenticate" para todos los usuarios, para el punto final "/products/**" solo los usuarios autenticados con JWT válido pueden acceso.
Probando la implementación
Autenticación y generación del token

Copie el token generado y agréguelo a otra llamada API, estoy accediendo a la siguiente API con credenciales de administrador

Si intentamos acceder a la API con credenciales de administrador donde solo el usuario puede acceder, obtendrá el error 403 Prohibido


Nota: si desea el código de github funcional de esta implementación, síganos y comente su ID de correo electrónico. Le enviaré el enlace del código fuente a su correo electrónico.
Parte 1: acceso basado en funciones de Spring Security con Spring Boot
Enlaces de referencia para otros conceptos de Spring Boot:
Tutorial de primavera AOP
Tutorial de registro de arranque de Spring
Configuración centralizada en Spring Boot
Anotaciones de Hibernate más utilizadas
Patrones de diseño de microservicios importantes para entrevistas