Decodificador JWT
Decodifique e inspecione um JSON Web Token. A verificação da assinatura precisa da chave de assinatura e deve ser feita no servidor — esta ferramenta apenas exibe o conteúdo.
Cabeçalho
Payload
Assinatura
- Copie o JWT do seu app, resposta de API ou cabeçalho Authorization.
- Cole na caixa. A decodificação acontece automaticamente enquanto você digita.
- Leia o cabeçalho e o payload decodificados; a assinatura é exibida como está, para referência.
- Confira o resumo das time-claims (iat, exp, nbf) para identificar tokens expirados.
O que ele faz?
Um JSON Web Token são três segmentos codificados em base64url unidos por pontos: header.payload.signature. O cabeçalho e o payload são JSON; a assinatura é a saída de HMAC ou RSA/ECDSA sobre os dois primeiros segmentos. Esta ferramenta divide nos pontos, decodifica cada parte em base64url, faz parsing do JSON e apresenta claims temporais padrão como exp em datas legíveis. Ela não verifica a assinatura — veja o FAQ abaixo para entender por quê.
Exemplo
Token de exemplo da especificação JWT (assinado em HS256 com o segredo your-256-bit-secret):
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c Cabeçalho decodificado:
{
"alg": "HS256",
"typ": "JWT"
} Payload decodificado:
{
"sub": "1234567890",
"name": "John Doe",
"iat": 1516239022
} Por que minha assinatura JWT está marcada como inválida?
Este decodificador não verifica assinaturas (veja o FAQ), mas se um verificador do servidor está rejeitando seu token, estas são as causas habituais.
- Segredo ou chave errados. Um único caractere diferente no segredo HMAC gera uma assinatura completamente diferente. Verifique se a variável JWT_SECRET no serviço validador é igual à do emissor.
- Algoritmos divergentes. Um token assinado com HS256 não pode ser verificado com RS256. Confira a claim alg no cabeçalho e certifique-se de que o verificador está configurado para o mesmo algoritmo.
- Token expirado. Mesmo um JWT corretamente assinado falha na validação quando exp está no passado. O resumo de time-claims mostra isso explicitamente após a decodificação.
- Desvio de relógio. nbf (not-before) um pouco no futuro, somado à deriva do relógio do servidor, causa erros de "token ainda não válido". Permita uma pequena margem (ex.: 60 segundos) no seu verificador.
- Espaços no token colado. Copiar e colar às vezes traz um espaço no início ou uma quebra de linha no fim. Um JWT precisa ser exatamente header.payload.signature, sem espaços ao redor.
- alg: none. Se o cabeçalho traz "alg": "none", o token não está assinado. Rejeite no verificador — nunca trate como válido.
Perguntas frequentes
Esta ferramenta consegue verificar a assinatura do JWT?
Não, e isso é proposital. Verificar uma assinatura exige a chave de assinatura — um segredo HMAC compartilhado ou uma chave pública assimétrica. Essa chave pertence ao servidor que emite ou consome o token, não a uma página web. Esta ferramenta apenas decodifica e exibe; a verificação acontece no seu backend.
O que há em cada um dos três segmentos do JWT?
Um JWT é header.payload.signature. O cabeçalho é um JSON que descreve o algoritmo (alg) e o tipo do token. O payload é um JSON com claims como sub, iat, exp. A assinatura é a saída codificada em base64url resultante de assinar os dois primeiros segmentos com o segredo ou chave privada. Os dois primeiros apenas estão codificados, não criptografados.
Meu JWT expirou — como saber?
Olhe a claim exp no payload. É um timestamp Unix em segundos. Se Date.now() / 1000 for maior que exp, o token está expirado. Esta ferramenta mostra exp, iat e nbf como datas legíveis abaixo do payload para você ver de um golpe, sem precisar fazer a conta.
O que significa alg: none e por que é perigoso?
alg: none é um recurso de JWT em que a assinatura é vazia e não é checada. Muitas bibliotecas historicamente aceitavam tais tokens, permitindo a atacantes forjar JWTs criando um payload e definindo alg como none. Se você vir esse valor no cabeçalho, o token não está assinado — não confie em nenhum servidor que o aceite.
Vocês salvam os JWTs que eu colo aqui?
Não. Não guardamos nenhum token colado no decodificador. O que você digita é descartado ao fechar ou atualizar a aba — sem logs, sem registro dos tokens que você inspecionou. Ainda assim, um JWT dá acesso até seu exp: trate como uma senha e rotacione qualquer token de produção que você tenha depurado.
A seção de assinatura mostra um bloco ilegível — isso é normal?
Sim. A assinatura é uma saída binária de HMAC ou RSA/ECDSA, codificada em base64url. Ela não foi feita para ser lida — serve apenas como verificação criptográfica. O que você usa são as partes JSON decodificadas: cabeçalho e payload. Uma assinatura vazia indica que o token não está assinado (alg: none).