Desenvolvedor 🔒 Roda no seu navegador — nenhum dado é enviado

Decodificador de JWT

Decodifique JSON Web Tokens localmente e verifique a assinatura com seu segredo ou chave pública, sem enviar nada.

Token JWT
Segredo ou chave pública
A chave é usada no seu navegador e nunca é enviada a lugar nenhum.
Decodificado
Cabeçalho

          
        
Payload

        
Assinatura

Assine um token seu para testar um endpoint. Tudo é calculado nesta página.

Chave de assinatura

A chave e o token pronto ficam no seu navegador: nada é enviado a lugar nenhum e nada disso vai em um link compartilhado.

Decodificador JWT - decodificar um JSON Web Token online

Cole um JSON Web Token e este decodificador o separa em três partes, exibindo o cabeçalho e o payload como JSON legível. É o caminho mais rápido para responder às perguntas que aparecem ao depurar autenticação: quem emitiu o token, para quem ele é, qual algoritmo o assinou e se ele já expirou.

A decodificação acontece inteiramente no seu navegador. Aqui isso importa mais do que na maioria das ferramentas, porque um JWT é uma credencial viva: quem capturar um token válido normalmente consegue agir como o seu sujeito até a expiração. Nada do que você colar nesta página é enviado, registrado ou armazenado.

Diagrama: um JWT dividido nos dois pontos em cabeçalho, payload e assinatura; cabeçalho e payload viram JSON legível e a assinatura é um HMAC dos dois.eyJhbGciOiJIUzI1NiIs….eyJzdWIiOiIxMjM0NTY3….2N-E3ZkgLmbR…CabeçalhoPayload (claims)Assinatura{ "alg": "HS256", "typ": "JWT"}{ "sub": "1234567890", "name": "Ada Lovelace", "iat": 1700000000, "exp": 1700003600}HMACSHA256( header + "." + payload, secret)JSON em Base64URL: qualquer um lêJSON em Base64URL: qualquer um lêVerificada com a chave secreta
Um JWT são três strings Base64URL unidas por pontos. O cabeçalho e o payload são JSON comum que qualquer pessoa pode decodificar, então um token nunca deve carregar segredos. Só a assinatura, verificada com a chave, mostra que o token não foi alterado.

O que é um JSON Web Token

Um JWT são três segmentos Base64URL unidos por pontos: header.payload.signature. O cabeçalho informa o algoritmo de assinatura, o payload carrega os claims - as afirmações que o emissor faz sobre o usuário ou o cliente - e a assinatura prova que as duas primeiras partes foram produzidas por quem tem a chave. Como cabeçalho e payload estão apenas codificados, e não criptografados, qualquer pessoa pode lê-los. Só a assinatura é protegida.

Como decodificar um JWT aqui

  1. Copie o token do cabeçalho Authorization: Bearer, de um cookie, de uma URL de callback ou do seu cliente de API.
  2. Cole a string completa header.payload.signature no campo de entrada.
  3. Clique em Decodificar para ver os dois objetos JSON.
  4. Se a requisição foi recusada, olhe primeiro exp e depois aud e iss.

O que mais esta página faz

O token é lido enquanto você digita, então os painéis se preenchem antes de você procurar o botão. Abaixo do cabeçalho e do payload decodificados, cada campo aparece numa tabela com a função dele em palavras simples, e uma linha acima transforma exp e nbf em frases: expirou há três dias, expira em cinquenta e oito minutos, ainda não é válido.

  • Exemplo carrega um token de demonstração com o segredo dele, para você ver uma verificação dar certo antes de colar algo seu.
  • Verificar aceita o segredo, uma chave pública PEM, um JWK avulso ou um JWKS inteiro. Cole o documento do endereço /.well-known/jwks.json do emissor e a chave indicada pelo kid do token é escolhida sozinha, então a página continua sem fazer nenhuma requisição própria. Preencha também Emissor esperado e Audiência esperada e uma assinatura válida é conferida como um servidor faria: um iss diferente, ou um aud que não contém o seu valor, deixa o resultado em vermelho.
  • Criar um token assina um token seu com qualquer um dos doze algoritmos — a página do gerador de JWT abre direto nessa aba.
  • Código mostra a verificação do lado do servidor em oito linguagens, seguindo o algoritmo do cabeçalho do seu token.
  • Outras duas páginas abrem esta ferramenta apontada para uma única pergunta: se expirou e por que está sendo recusado.

Os claims padrão e o que significam

ClaimSignificadoPor que falha
issEmissor: quem criou o tokenNão bate quando um token de homologação vai para produção
subSujeito: normalmente o ID do usuário ou do serviçoVazio em tokens emitidos para um cliente e não para uma pessoa
audAudiência: a API que deveria aceitá-loA causa mais comum de um 401 com token aparentemente válido
expExpiração como timestamp UnixJá passou, ou o relógio do servidor está fora de sincronia
nbfNão válido antes deste instanteToken usado alguns segundos cedo demais
iatMomento da emissãoBase para políticas de idade máxima e janelas de revogação
jtiID único do tokenNecessário para bloquear um token específico

Decodificar não é verificar

Esse é o ponto que mais confunde. Ler um token mostra o que ele afirma, não se a afirmação é verdadeira. Verificar significa recalcular a assinatura com o segredo ou a chave pública do emissor e comparar, além de checar expiração e audiência. Qualquer decodificador exibe o payload de um token forjado com a mesma facilidade do payload de um token legítimo, então nunca tome uma decisão de autorização apenas com o conteúdo decodificado: verifique no servidor com uma biblioteca mantida.

Diagnóstico de um token que não funciona

  • 401 com token válido: compare aud com o que a API espera e iss com a URL de emissor configurada. Coloque os dois em Emissor esperado e Audiência esperada e clique em Verificar: o resultado mostra o valor que o token realmente traz.
  • Expirado na hora: converta exp com o conversor de timestamp Unix e compare com o relógio do servidor, não com o do seu notebook.
  • Erro de segmento inválido: o token foi truncado, foi codificado como URL no caminho ou uma quebra de linha entrou na cópia.
  • Falha na verificação da assinatura: a chave foi rotacionada, o key ID errado foi usado ou o token veio de outro ambiente.
  • alg igual a none: rejeite. Esse valor indica um token sem assinatura e é um ataque clássico contra validações descuidadas.

Hábitos de segurança que valem a pena

  • Nunca guarde dados pessoais, IDs internos ou informação confidencial no payload: ele é legível por definição.
  • Mantenha tokens de acesso de vida curta e use um refresh token para sessões longas.
  • Transmita tokens apenas por HTTPS e prefira cookies secure e HttpOnly ao armazenamento do navegador.
  • Faça rotação programada das chaves de assinatura e publique-as em um endpoint JWKS para que os clientes acompanhem.
  • Considere exposto qualquer token que você tenha colado em uma ferramenta online, e é exatamente por isso que esta não envia nada a lugar nenhum.

Funciona offline no seu navegador

O decodificador é JavaScript do lado do cliente. Depois que a página carrega, você consegue decodificar tokens sem nenhuma conexão de rede, e credenciais de produção nunca saem da sua máquina.

Decodificar um JWT em código ou no terminal

OndeComo
JavaScript (npm)import { jwtDecode } from 'jwt-decode'; jwtDecode(token) - só o payload, sem verificação
Python (PyJWT)jwt.decode(token, options={'verify_signature': False}) para ler, ou passe a chave para verificar
Bashecho $TOKEN | cut -d. -f2 | tr '_-' '/+' | base64 -d 2>/dev/null - Base64URL omite o preenchimento, então um payload curto pode precisar de == no final
Console do navegadorJSON.parse(atob(token.split('.')[1].replace(/-/g, '+').replace(/_/g, '/')))

Todas essas opções leem o token sem conferir a assinatura, o que é bom para depurar e errado para autorizar; veja a seção acima.

Ferramentas relacionadas

Tokens ficam no cruzamento de vários formatos. Leia os segmentos brutos com o decodificador Base64, organize o payload com o formatador JSON, transforme exp e iat em datas com o conversor de timestamp e limpe um token extraído de uma URL com o decodificador de URL.

Guias relacionados