O jose cobre toda a família JOSE — tokens assinados e criptografados, importação e exportação de JWK, conjuntos de chaves JWK locais e remotos — com uma única API em todos os runtimes JavaScript. Desde a versão 6, ele faz toda a criptografia por meio do WebCrypto; por isso, as chaves são objetos CryptoKey (instâncias de KeyObject do Node.js continuam aceitas), e a biblioteca herda a lista de curvas do WebCrypto: ES256, ES384 e ES512, EdDSA e Ed25519 e, na versão 6.2.13, os algoritmos ML-DSA onde o runtime os oferece. ES256K e Ed448 são recusados com ERR_JOSE_NOT_SUPPORTED.
Os padrões são estritos onde importa. jwtVerify() nunca aceita alg: none — tokens sem assinatura só podem ser lidos pela classe separada UnsecuredJWT —, e uma chave fica vinculada a uma única família de algoritmos; assim, um token HS256 apresentado com uma chave pública EC, ou um token RS256 com uma chave EC, falha com um TypeError em vez de ser verificado. O ES256 também recusa uma chave P-384. Passe algorithms mesmo assim: com um conjunto de chaves que contém vários tipos de chave, é isso que impede que um emissor troque de algoritmo silenciosamente.
Dois padrões apontam em direções opostas. clockTolerance é zero, o que é estrito, e exp é opcional, o que não é: um token sem expiração é verificado, a menos que você liste essa claim em requiredClaims, como faz o exemplo. Um JWS cuja assinatura ECDSA chegou em DER — algo típico quando um token é montado à mão com um KMS de nuvem ou com openssl dgst — falha com o genérico signature verification failed, sem nada que aponte para a codificação; o depurador de JWT mostra o tamanho da assinatura num relance, e o conversor DER ⇄ bruto corrige o problema.
A importação de chaves é explícita: importSPKI e importPKCS8 recebem strings PEM — bytes DER são recusados com "spki" must be SPKI formatted string —, importX509 recebe um certificado PEM e importJWK recebe uma JWK. Os arquivos SEC1 EC PRIVATE KEY que o OpenSSL grava por padrão são rejeitados por importPKCS8; converta-os antes para PKCS#8, por exemplo com o conversor de JWK.
Para verificar tokens de um provedor de identidade, use createRemoteJWKSet com o jwks_uri do provedor: ele mantém as chaves em cache, busca o conjunto de novo diante de um kid desconhecido e aplica um limite de taxa a essas novas buscas. Confira o que o provedor realmente publica com o verificador de JWKS.