Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Solucionado (ver solución)
Solucionado
(ver solución)
2
respuestas

[Duda] Proceso de validación del JWT

Buen día, comunidad! Escribo ya que tengo una duda muy puntual:

En el curso, el instructor generó este código para generar los JWT:

public String generarToken(Usuario usuario) {
        try {
            Algorithm algorithm = Algorithm.HMAC256("124567");
            return JWT.create()
                .withIssuer("voll med")
                .withSubject(usuario.getUsername())
                .withClaim("id", usuario.getId())
                .withExpiresAt(generarFechaDeExpiración())
                .sign(algorithm);
        } catch (JWTCreationException exception){
            throw new RuntimeException();
        }
    }
    private Instant generarFechaDeExpiración() {
        return LocalDateTime.now().plusHours(2).toInstant(ZoneOffset.of("-05:00"));
    }

Y este otro para verificar el JWT recibido y obtener el subject:

public String getSubject(String token) {
        if(token == null) {
            throw new RuntimeException();
        }
         DecodedJWT verifier = null;
        try {
            Algorithm algorithm = Algorithm.HMAC256("124567"); //Secret
           verifier = JWT.require(algorithm)
                .withIssuer("voll med")
                .build()
                .verify(token);
           verifier.getSubject();     
        } catch (JWTVerificationException exception){
            System.out.println(exception.toString());
        }
        if(verifier.getSubject() == null) {
            throw new RuntimeException("Verifier inválido");
        }
        return verifier.getSubject();
    }

Mi duda es respecto al método .withIssuer("voll med") usado dentro del bloque try-catch: ¿este método puede omitirse o su uso es forzoso?

Y en caso de ser forzoso, hay algún otro método que deba ejecutarse al momento de estar configurando la autenticación de un API REST "real" (es decir, ya en producción)?

2 respuestas
solución!

¡Hola Oscar!

Gracias por compartir tu duda sobre el proceso de validación del JWT en el curso. En cuanto a tu pregunta sobre el método .withIssuer("voll med"), este método no es obligatorio, pero se recomienda su uso para proporcionar información adicional sobre el emisor del token. El valor que se pasa como argumento en este método es el "issuer" o emisor del token, que puede ser cualquier cadena que identifique de manera única al emisor.

En cuanto a tu segunda pregunta, al configurar la autenticación de un API REST "real" en producción, hay otros métodos que puedes considerar ejecutar, dependiendo de tus necesidades específicas. Algunos ejemplos son:

  • .withExpiresAt(generarFechaDeExpiración()): Este método establece la fecha de expiración del token. Puedes ajustar la duración del token según tus requisitos de seguridad.
  • .withClaim("id", usuario.getId()): Este método permite agregar reclamaciones personalizadas al token, como el ID del usuario. Puedes agregar más reclamaciones según tus necesidades específicas.

Recuerda que la configuración de autenticación puede variar según el contexto de tu API REST, por lo que es importante adaptarla a tus necesidades específicas.

Espero que esta información te sea útil. ¡Si tienes alguna otra pregunta, no dudes en preguntar! ¡Buena suerte con tu aprendizaje!

Espero haber ayudado y ¡buenos estudios!

Muchísimas gracias por despejar mi duda, Evelyn! El apoyo que nos brindan al responder a nuestras dudas es de lo mejor, gracias Team Alura :DD