JJWT 0.12 y posteriores ofrecen un constructor y un analizador fluidos —Jwts.builder()…signWith(key, alg) y Jwts.parser().verifyWith(key)…parseSignedClaims(token)—, con los algoritmos en Jwts.SIG. Se distribuye en tres artefactos: jjwt-api en tiempo de compilación, y jjwt-impl y un módulo de integración JSON como jjwt-jackson en tiempo de ejecución. La 0.13.0 superó la prueba de ida y vuelta con HS, RS, PS y ES de 256/384/512 y EdDSA; ES256K y los nombres Ed25519 y Ed448 no están en Jwts.SIG.
El analizador deduce el algoritmo permitido a partir de la clave de verificación, y sus errores lo dicen claramente. Un token RS256 contra una clave pública EC y un token HS256 con el texto PEM de la clave EC como clave fallaron ambos con UnsupportedJwtException, que explica que la clave no se puede usar con ese algoritmo. La protección es el tipo de clave, no una lista: un analizador con Keys.hmacShaKeyFor(pemBytes) verificó ese token falsificado, así que nunca construyas claves HMAC a partir de material que pueda ser público.
parseSignedClaims rechaza los tokens sin firmar con un mensaje que cita el RFC 7518 §3.6, y solo se pueden leer mediante Jwts.parser().unsecured()…parseUnsecuredClaims. Las claves HMAC débiles ni siquiera llegan tan lejos: Keys.hmacShaKeyFor rechazó una clave de 16 bytes con WeakKeyException, porque el RFC 7518 exige claves al menos tan largas como el hash. ES256 rechaza una clave P-384 al firmar.
Hay dos valores predeterminados que merecen atención. No hay tolerancia para el desfase de reloj —un token caducado 3 segundos antes falló— y exp es opcional, así que establece clockSkewSeconds y comprueba la caducidad y el emisor como hace el ejemplo. Las firmas ES256 son el r‖s en bruto de 64 bytes; una firma DER se notifica con precisión (Provided signature is 576 bits (72 bytes) but ES256 signatures must be exactly 512 bits (64 bytes)): es una de las pocas bibliotecas que nombran el problema de codificación. Inspecciona los tokens en el decodificador de JWT y las claves HMAC con el comprobador de secretos JWT.
Para manejar JWE y conjuntos JWK a gran escala, compárala con Nimbus JOSE + JWT.