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:
- Dividir o token pelos pontos em exatamente três segmentos não vazios. Qualquer outra forma está malformada.
- Decodificar em base64url os segmentos 0 e 1, e depois aplicar
JSON.parseem 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). - Se um segredo for fornecido, recalcular o MAC sobre
<segment0>.<segment1>usando o algoritmo do cabeçalho. Comparar os bytes com o terceiro segmento. - 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,XMLHttpRequestnemsendBeacon. Abra o DevTools enquanto decodifica e verifica — o painel Network permanece silencioso. - Web Crypto nativo: a verificação HMAC usa
crypto.subtle.importKeyecrypto.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.