Visualizando em Português Ver em inglês

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.

  1. Copie o JWT do seu app, resposta de API ou cabeçalho Authorization.
  2. Cole na caixa. A decodificação acontece automaticamente enquanto você digita.
  3. Leia o cabeçalho e o payload decodificados; a assinatura é exibida como está, para referência.
  4. 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).