TK TaskKit
Ferramentas para programadores

Descodificador JWT

Descodifica JSON Web Tokens, inspeciona claims e verifica a expiração sem enviar o token.

Token
Descodificado

Cola um JWT para inspecionar o seu header, payload e claims registados.

Token HS256 assinado com o segredo "taskkit-demo-secret" — muda para o modo Verificar e cola o segredo para testar a verificação.

As entradas ficam neste dispositivo. Cada ferramenta para programadores no TaskKit corre inteiramente no teu navegador. Tokens, payloads e texto colado não são transmitidos para servidores do TaskKit nem para terceiros.

O que esta ferramenta faz

Este descodificador JWT divide um JSON Web Token nas suas três partes — header, payload e assinatura — e mostra-te o conteúdo descodificado em conjunto com os claims registados (iss, sub, aud, exp, iat, nbf, jti). A janela de validade é calculada a partir de exp e nbf para veres num relance se um token está dentro do prazo.

Também oferece verificação de assinatura para os algoritmos que as APIs usam de facto: HS256/384/512 com um segredo partilhado, RS256/384/512 e PS256/384/512 com uma chave pública RSA, ES256/384/512 com uma chave pública EC, e EdDSA com uma chave Ed25519. As chaves públicas podem ser coladas como JWK, como JWKS completo (o TaskKit escolhe a chave certa fazendo correspondência com o kid do token), como bloco PEM SPKI, como chave pública RSA PEM PKCS#1, como certificado X.509 (a chave pública é extraída automaticamente) ou — para EdDSA — como 64 caracteres hex ou 43 caracteres base64url. Se o header do token contiver um array x5c (uma cadeia de certificados X.509 inline), o certificado leaf é usado automaticamente quando o campo da chave está vazio.

Quando usar

  • Inspecionar um token devolvido pelo teu servidor de autenticação durante desenvolvimento local.
  • Confirmar que os claims de um token de terceiros correspondem ao que o teu cliente esperava.
  • Verificar que um token renovado está assinado com a mesma chave que o anterior.
  • Verificar a expiração quando algo deixou de funcionar exatamente à meia-noite UTC.

Como funciona

A descodificação é apenas Base64URL — a especificação JWT usa Base64 URL-safe sem padding. O header e o payload são JSON; a assinatura são bytes em bruto. A verificação usa crypto.subtle.verify, a API WebCrypto integrada no navegador, com o algoritmo lido a partir do header. EdDSA passa por @noble/ed25519 (também só no navegador) porque o suporte WebCrypto para Ed25519 ainda é irregular entre navegadores.

A entrada da chave é permissiva quanto ao formato. As chaves simétricas (HS*) são importadas como bytes em bruto ou como JWK. As chaves assimétricas (RS/PS/ES) são aceites como JWK, JWKS (o kid do token escolhe a chave certa — conjuntos com uma única chave são usados diretamente), PEM SPKI (BEGIN PUBLIC KEY), chave pública RSA PEM PKCS#1 (BEGIN RSA PUBLIC KEY) ou certificado X.509 (BEGIN CERTIFICATE) — o TaskKit percorre o certificado com um pequeno leitor ASN.1 próprio para extrair o SubjectPublicKeyInfo embutido. As chaves EdDSA podem ser JWK, JWKS, PEM SPKI, 64 caracteres hex ou 43 caracteres base64url.

Nada nesta ferramenta corre do lado do servidor. O token nunca sai do teu navegador, a chave nunca sai do teu navegador e não há telemetria sobre nenhum dos dois. Se colares um token de produção para depurar algo, o teu auditor não verá um pedido a taskkit.net a transportar esse token.

Notas

Porque é que "alg: none" é rejeitado mesmo quando o token valida? Porque nenhum JWT real deveria usar alg: none. É um vetor de ataque conhecido: se o teu verificador aceitar none, um atacante pode remover a assinatura e forjar qualquer payload. Mostramo-lo como erro em vez de o aceitar silenciosamente.

Posso verificar um token Microsoft / Google / Auth0? Sim — vai buscar o JWKS do emissor (por exemplo https://login.microsoftonline.com/common/discovery/v2.0/keys) e cola o documento JSON inteiro no campo da chave. O TaskKit lê o header kid do token e escolhe automaticamente o JWK correspondente; não é preciso procurar manualmente.

HS256 ou RS256 — qual devo usar? RS256 (ou ES256) para qualquer coisa que uma parte externa vai verificar, já que basta a chave pública. HS256 está bem para serviço a serviço quando ambos os lados detêm o mesmo segredo.

O meu token tem um header x5c — significa que estou a confiar no certificado embutido? O TaskKit usa o certificado leaf de x5c para verificar a assinatura quando não colas uma chave, para confirmares que o conteúdo do token não foi adulterado. Não valida a cadeia até a uma CA — isso requer raízes de confiança e está fora do âmbito aqui. O chip de resultado mostra "verificado com o certificado x5c do header do token (cadeia não validada)" para que não confundas com um veredicto de confiança ponta a ponta.

Ferramentas relacionadas