§

Cole seu JWT

A análise e a verificação de assinatura são executadas localmente. Nada sobre o token é enviado para um servidor.
§

Cabeçalho

json
§

Payload

json
§

Verificar assinatura

Insira um segredo para verificar a assinatura.

JWTs estão por toda parte no Brasil regulado: o Gov.br SSO (login único do governo federal) devolve um `id_token` JWT ao redirecionar de volta para o `redirect_uri` da aplicação, com claims `cpf`, `name` e `amr` indicando o nível de confiabilidade (Bronze, Prata ou Ouro). O Open Finance Brasil usa JWTs FAPI assinados em PS256 com o certificado do diretório central, e bancos como Itaú, Bradesco e BTG Pactual emitem `access_token` JWT para clientes corporativos. Use este decodificador no navegador para inspecionar `exp`, `iss` e `scope` sem colar o token completo — que carrega dados pessoais cobertos pela LGPD — em um depurador online de terceiros.

O que é um JSON Web Token?

Um JSON Web Token (JWT) é um envelope compacto e seguro para URLs que carrega um pequeno payload de claims. É o formato de credencial padrão para sessões web sem estado, tokens de ID OAuth/OIDC, autenticação de APIs entre máquinas e magic links assinados. Um JWT é sempre composto por três segmentos base64url unidos por pontos: header.payload.signature. O cabeçalho e o payload são JSON; a assinatura é um MAC binário ou uma assinatura digital sobre os dois primeiros segmentos.

Como funcionam os JWTs?

Ao decodificar um token, esta ferramenta percorre o mesmo caminho em três etapas que qualquer biblioteca JWT segue:

  1. Dividir o token pelos pontos em exatamente três segmentos não vazios. Qualquer outra forma está malformada.
  2. Decodificar em base64url os segmentos 0 e 1, e depois aplicar JSON.parse em cada um. O cabeçalho carrega o algoritmo (alg) e o tipo do token (typ). O payload carrega as claims (sub, exp, iat, chaves personalizadas).
  3. Se um segredo for fornecido, recalcular o MAC sobre <segment0>.<segment1> usando o algoritmo do cabeçalho. Comparar os bytes com o terceiro segmento.
  4. Apresentar o resultado da verificação junto às claims decodificadas, incluindo um indicador de expiração legível por humanos calculado a partir da claim exp.

Por que decodificar JWTs no navegador?

Colar um JWT real e em uso em um depurador remoto expõe a credencial aos logs daquele serviço, à sua pilha de observabilidade e a qualquer parceiro para o qual o serviço envie dados. Mesmo quando o site terceiro afirma não registrar tokens, você não tem como verificar isso. Esta ferramenta foi feita para que você nunca precise fazer esse compromisso:

  • Zero rede: o runtime não tem chamadas a fetch, XMLHttpRequest nem sendBeacon. Abra o DevTools enquanto decodifica e verifica — o painel Network permanece silencioso.
  • Web Crypto nativo: a verificação HMAC usa crypto.subtle.importKey e crypto.subtle.sign, as mesmas primitivas que seu runtime chamaria.
  • Deploy estático: cada página é um único arquivo HTML estático sem endpoint de servidor a comprometer. Não há token para vazar porque não há servidor para vazá-lo.

O que esta ferramenta verifica, e o que não verifica?

A versão 1 desta ferramenta verifica apenas assinaturas da família HMAC-SHA. Concretamente:

  • Suportados: HS256, HS384, HS512. Forneça o segredo compartilhado e a ferramenta recalculará e comparará o MAC.
  • Ainda não suportados: RS256/384/512 (RSA), ES256/384/512 (ECDSA), EdDSA e PS256/384/512 (RSA-PSS). Esses exigem uma chave pública em formato PEM ou JWK e foram deliberadamente adiados para uma versão futura.
  • Recusado: alg: "none". A ferramenta decodifica o token, mas o marca explicitamente como inseguro — não há validação de assinatura acontecendo, e qualquer sistema em produção que aceite tal token apresenta uma vulnerabilidade séria.

Como é um exemplo de decodificação de JWT?

Cole o token de exemplo canônico do RFC 7519 no campo de entrada acima:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

O cabeçalho decodifica para {"alg":"HS256","typ":"JWT"} e o payload para {"sub":"1234567890","name":"John Doe","iat":1516239022}. Insira your-256-bit-secret no painel de verificação e a checagem de assinatura retorna válida. Altere um único caractere do segredo e ela retorna inválida. Nada disso sai do seu navegador.

Este é o decodificador de JWT que gostaríamos que existisse quando precisamos depurar um token em produção: respeita a privacidade, é rápido e construído sobre as mesmas primitivas que o runtime usa.