Introducción

1

Protección de aplicaciones con Spring Security

2

Configuración de Spring Security: Autorización y Autenticación

3

Configuración de Spring Security en Proyectos Java con Gradle

4

Autenticación Básica con Spring Security por Defecto

Configuración de seguridad

5

Configuración de Seguridad con Spring Security y Basic Authentication

6

Funcionamiento del Basic Authentication Filter en Spring Security

7

Deshabilitar protección CSRF en APIs REST con Spring Security

8

Configuración de CORS en Spring Security para APIs y Frontend

9

Configuración de Reglas de Acceso en Spring Security

10

Creación de usuarios personalizados en Spring Security

11

Creación y Gestión de Roles y Permisos en Aplicaciones Web

Autenticación con BD

12

Creación y Gestión de Usuarios en Base de Datos con Spring Security

13

Implementación de User Detail Service en Spring Security con MySQL

14

Asignación de Roles y Permisos en Spring Security

15

Permisos Específicos con Authorities en Spring Security

16

Seguridad de Métodos en Spring Security: Control de Accesos por Roles

Seguridad con JWT

17

Creación y Uso de JSON Web Tokens en Java con Auth0

18

Implementación de Autenticación con JSON Web Tokens en Spring Boot

19

Validación de JSON Web Tokens con Auth0 en Java

20

Creación de Filtro de Seguridad JWT en Spring Security

21

Implementación de JSON Web Token en Spring Security

Próximos pasos

22

Auditoría de Usuarios con Spring Security y Data JPA

23

Configuración y Personalización de Spring Security

No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Validación de JSON Web Tokens con Auth0 en Java

19/23
Recursos

¿Cómo validar un JSON Web Token en Java?

En este artículo, exploraremos cómo validar un JSON Web Token (JWT) en Java utilizando la biblioteca Auth0. Esta práctica es crucial para garantizar que los tokens sean auténticos y no hayan sido manipulados. Además, aprenderemos a obtener al usuario al que pertenece el token. ¡Vamos allá!

¿Cómo crear el método isValid?

Comencemos por crear un método que nos permita verificar la validez de un JSON Web Token dentro de nuestra clase JWTUtils. Este método es esencial para mejorar la seguridad de nuestras aplicaciones.

public boolean isValid(String token) {
    try {
        Algorithm algorithm = Algorithm.HMAC256("mi_secreta");
        JWTVerifier verifier = JWT.require(algorithm).build();
        verifier.verify(token);
        return true;
    } catch (JWTVerificationException exception) {
        return false;
    }
}

Detalles del método isValid

  • Parámetro: El método isValid recibe un String que representa el JSON Web Token que se necesita validar.
  • Uso de Auth0: Se utiliza la clase JWT y se especifica el algoritmo de encriptación utilizado anteriormente para la creación del token.
  • Verificación: Si el token es válido, la función verify no producirá errores y regresará true.
  • Captura de excepciones: La excepción JWTVerificationException indica que el token no es válido, y el método retornará false.

¿Cómo obtener el usuario del token con getUserName?

Otro aspecto importante de la gestión de JWT es poder determinar a quién pertenece un token. Para esto, creamos el método getUserName.

public String getUserName(String token) {
    try {
        Algorithm algorithm = Algorithm.HMAC256("mi_secreta");
        JWTVerifier verifier = JWT.require(algorithm).build();
        DecodedJWT jwt = verifier.verify(token);
        return jwt.getSubject();
    } catch (JWTVerificationException exception) {
        return null;
    }
}

¿Qué hace el método getUserName?

  • Objeto DecodedJWT: Si el token es verificado correctamente, la función obtiene un DecodedJWT que proporciona una representación legible del token.
  • Obtención del sujeto: Utilizamos getSubject() para extraer el "subject", que es el usuario dentro del payload del token.
  • Captura de excepciones: Devolverá null si el token no es válido o si ocurre algún error durante la verificación.

Explorando el JSON Web Token con JWT.io

Para comprender cómo un JWT almacena información, es útil examinarlo visualmente en JWT.io. Al inicio de sesión, puedes reemplazar un token existente con uno válido y ver:

  • Encabezado: Contiene el algoritmo y tipo de token.
  • Payload: Incluye la información como el usuario (subject).
  • Firma: Está generada con secret y garantiza la integridad del token.

Esta herramienta permite verificar rápidamente si los datos se están codificando y decodificando correctamente.

Conclusiones prácticas

Con estos métodos, disponemos de un mecanismo robusto para asegurar que nuestros tokens JWT son válidos y para determinar a quién pertenecen. Esto es vital en cualquier aplicación que use autenticación basada en tokens, ya que asegura que las solicitudes de los usuarios sean válidas y autenticadas. ¡Sigue aprendiendo y mejorando tus habilidades para construir aplicaciones seguras!

Aportes 5

Preguntas 1

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Para crear un servicio que valide un JSON Web Token (JWT), se debe implementar un método en la clase JWT Utils llamado `isValid`. Este método recibe un JWT como parámetro y verifica su validez usando la librería Auth0. 1. Se especifica el algoritmo de encriptación utilizado. 2. Se utiliza el método `verify` que lanza una excepción si el token no es válido. 3. Se envuelve el proceso en un bloque `try-catch`: - Si se lanza una `JWT verification exception`, se retorna `false`. - Si la verificación es exitosa, se retorna `true`. Esto asegura que el token no haya sido modificado y que siga siendo válido.

JwtUtil ```js package com.platzi.pizzeria.web.config; import com.auth0.jwt.JWT; import com.auth0.jwt.algorithms.Algorithm; import com.auth0.jwt.exceptions.JWTVerificationException; import org.springframework.stereotype.Component; import java.util.Date; import java.util.concurrent.TimeUnit; @Component public class JwtUtil { private static String SECRET_KEY = "pl4tz1_p1zz4"; private static Algorithm ALGORITHM = Algorithm.HMAC256(SECRET_KEY); public String create(String username) { return JWT.create() .withSubject(username) .withIssuer("platzi-pizza") .withIssuedAt(new Date()) .withExpiresAt(new Date(System.currentTimeMillis() + TimeUnit.DAYS.toMillis(15))) .sign(ALGORITHM); } public boolean isValid(String jwt) { try { JWT.require(ALGORITHM) .build() .verify(jwt); return true; } catch (JWTVerificationException e) { return false; } } public String getUsername(String jwt) { return JWT.require(ALGORITHM) .build() .verify(jwt) .getSubject(); } } ```
Si alguno nota que no le aparece el JWT en postman lo que pueden hacer es que se los imprima la consola con `System.out.println(jwt)` Esa linea la agregan en el authController justo antes del return
no me aparece el token en 'Authorization' lo agrego pero no captura nada, que debo hacer? ![](https://static.platzi.com/media/user_upload/image-f5334811-817d-4324-b539-fe7512a8aa0c.jpg)