O JJWT 0.12 e versões posteriores expõem um builder e um parser fluentes — Jwts.builder()…signWith(key, alg) e Jwts.parser().verifyWith(key)…parseSignedClaims(token) —, com os algoritmos em Jwts.SIG. Ele é distribuído em três artefatos: jjwt-api em tempo de compilação e, em tempo de execução, jjwt-impl e um módulo de serialização JSON, como o jjwt-jackson. A versão 0.13.0 fez o ciclo completo de ida e volta com HS, RS, PS e ES em 256/384/512 e com EdDSA; ES256K e os nomes Ed25519 e Ed448 não estão em Jwts.SIG.
O parser deriva o algoritmo permitido da chave de verificação, e seus erros dizem isso com clareza. Um token RS256 contra uma chave pública EC e um token HS256 que usava como chave o texto PEM da chave EC falharam com UnsupportedJwtException, que explica que a chave não pode ser usada com aquele algoritmo. A proteção é o tipo da chave, não uma lista: um parser que recebeu Keys.hmacShaKeyFor(pemBytes) verificou esse token forjado; por isso, nunca crie chaves HMAC a partir de material que possa ser público.
Tokens sem assinatura são recusados por parseSignedClaims com uma mensagem que cita a RFC 7518 §3.6, e só podem ser lidos por meio de Jwts.parser().unsecured()…parseUnsecuredClaims. Chaves HMAC fracas nem chegam até aí: Keys.hmacShaKeyFor rejeitou uma chave de 16 bytes com WeakKeyException, já que a RFC 7518 exige chaves pelo menos do tamanho do hash. O ES256 recusa uma chave P-384 no momento da assinatura.
Dois padrões exigem atenção. Não há tolerância para diferença de relógio — um token expirado três segundos antes falhou — e exp é opcional; por isso, defina clockSkewSeconds e verifique a expiração e o emissor, como faz o exemplo. As assinaturas ES256 são o r‖s bruto de 64 bytes; uma assinatura DER é relatada com precisão (Provided signature is 576 bits (72 bytes) but ES256 signatures must be exactly 512 bits (64 bytes)), e o JJWT é uma das poucas bibliotecas que apontam o problema de codificação. Inspecione tokens no depurador de JWT e chaves HMAC com o verificador de segredos JWT.
Para lidar com JWE e conjuntos de chaves JWK em escala, compare com o Nimbus JOSE + JWT.