Decodificador JWT Online — Gratuito, Sem Servidor, No Navegador
Cole qualquer JSON Web Token e decodifique instantaneamente o header, payload e assinatura com este decodificador JWT online gratuito — sem servidor, sem cadastro, tudo rodando no seu navegador via Web Crypto API nativa. Campos de timestamp como exp, iat e nbf são convertidos automaticamente para datas legíveis, permitindo identificar tokens expirados de relance.
Além da decodificação básica, a ferramenta verifica assinaturas HMAC (HS256, HS384, HS512) diretamente no navegador e gera código JWT pronto para uso em JavaScript, PHP, Python e Java — tornando-a um debugger JWT completo para desenvolvimento.
Como Usar o Decodificador JWT
- Cole seu token JWT no campo de entrada — clique em Colar da Área de Transferência ou digite o token codificado. A ferramenta destaca imediatamente as três partes separadas por ponto (header em rosa, payload em roxo, assinatura em ciano) para que você visualize a estrutura de uma só vez.
- Inspecione os dados decodificados — o painel do header mostra o algoritmo e o tipo do token; o painel do payload exibe todas as claims com timestamps
iat,expenbfconvertidos automaticamente para datas ISO, facilitando a identificação de problemas de expiração sem cálculos manuais. - Verifique a expiração — a claim
expé exibida ao lado da data legível correspondente. Se a data de expiração já passou, você confirma que o token está expirado antes de tocar em uma linha de código. - Verifique a assinatura — para tokens HMAC (HS256, HS384, HS512), insira sua chave secreta no painel de verificação. Marque "BASE64 ENCODED" se o segredo estiver em Base64. Um badge verde "Assinatura Verificada" confirma autenticidade; um badge vermelho indica segredo errado ou token adulterado.
- Gere código — acesse o gerador de código, escolha a linguagem (JavaScript, PHP, Python, Java) e o algoritmo, e copie o snippet de assinatura diretamente para o seu projeto.
Exemplos de Decodificação JWT
Exemplo Padrão (token de referência do jwt.io)
O token abaixo é o exemplo canônico usado no jwt.io — seguro para testar em qualquer decodificador JWT:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
Header decodificado:
{
"alg": "HS256",
"typ": "JWT"
}
Payload decodificado:
{
"sub": "1234567890",
"name": "John Doe",
"iat": 1516239022
}
A claim iat (emitido em) é renderizada como 2018-01-18T01:30:22.000Z. Observe que não há claim exp — o token não tem expiração definida, um erro comum em exemplos que não deve ser copiado para produção.
Caso de Borda 1 — Token Expirado
Cole um token cuja claim exp seja um timestamp Unix no passado (ex.: "exp": 1700000000). A ferramenta decodifica normalmente e exibe a data de expiração ao lado do valor bruto. Você verá imediatamente que a data já passou — confirmando que um "401 Unauthorized" é causado por expiração, não por segredo errado ou audiência incorreta.
Caso de Borda 2 — Token Malformado (Apenas Duas Partes)
Se você colar uma string com apenas um ponto (dois segmentos em vez de três), a ferramenta rejeita com o erro: "Token JWT inválido. Formato esperado: header.payload.signature." Isso detecta erros de cópia, como truncar acidentalmente a assinatura ou copiar apenas parte de um token de um arquivo de log.
Caso de Borda 3 — Token com alg: none (Sem Assinatura)
Um token com "alg": "none" no header não possui assinatura — depende inteiramente de o servidor aceitar tokens não assinados. A ferramenta decodifica e exibe o algoritmo none no painel do header. A seção de verificação indica estado "não suportado", sinalizando que não há nada a verificar. Isso é um alerta crítico: se sua aplicação aceita tokens alg: none, qualquer atacante pode criar payloads arbitrários sem conhecer seu segredo.
O Que É um JSON Web Token?
Um JSON Web Token (JWT) é um formato compacto e seguro para URL usado para transmitir claims entre partes de forma segura. Definido na RFC 7519, cada JWT possui três seções codificadas em Base64URL separadas por pontos:
- Header — declara o tipo do token (
JWT) e o algoritmo de assinatura (HS256,RS256, etc.) - Payload — contém as claims: ID do usuário, papéis, permissões, tempo de expiração e dados personalizados
- Signature — hash criptográfico do header e payload, assinado com um segredo ou chave privada, garantindo que o token não foi modificado
JWTs são o formato padrão de credencial em APIs REST, fluxos de autorização OAuth 2.0 e tokens de identidade OpenID Connect.
Algoritmos Suportados
| Algoritmo | Família | Descrição |
|---|---|---|
| HS256 | HMAC | HMAC com SHA-256 — simétrico, amplamente usado |
| HS384 | HMAC | HMAC com SHA-384 |
| HS512 | HMAC | HMAC com SHA-512 — opção simétrica mais robusta |
| RS256 | RSA | RSASSA-PKCS1-v1_5 com SHA-256 — assimétrico |
| RS384 | RSA | RSASSA-PKCS1-v1_5 com SHA-384 |
| RS512 | RSA | RSASSA-PKCS1-v1_5 com SHA-512 |
Casos de Uso Comuns
- Debug de autenticação: Quando uma API retorna 401 ou o frontend recebe "token inválido", cole o JWT aqui para verificar a claim
exp(expirou?), a claimaud(corresponde à audiência esperada?) e o algoritmo antes de escrever qualquer código. - Auditorias de segurança: JWTs são codificados em Base64, não criptografados — o payload é legível por qualquer pessoa. Cole tokens do seu sistema para confirmar que nenhum dado sensível está vazando pelas claims.
- Testes de desenvolvimento e integração: Verifique se o backend emite tokens com as claims corretas, TTL correto (
expmenosiat) e o algoritmo certo antes de escrever testes de integração. - Verificação de assinatura: Insira seu segredo HMAC para confirmar que um token foi assinado com a chave esperada — útil ao depurar incompatibilidades entre serviços que compartilham um segredo.
- Aprendizado da estrutura JWT: A visão dividida com cores e a exibição legível de claims tornam esta ferramenta ideal para entender como JWTs funcionam sem ler a RFC.
- Geração de código: O gerador de código integrado produz snippets JWT prontos para uso, sem precisar procurar os métodos corretos de cada biblioteca.
Erros Comuns com JWTs
Confundir Decodificação com Verificação
Este é o equívoco mais generalizado. Decodificar um JWT lê o payload sem verificar a assinatura — qualquer pessoa pode fazer isso sem conhecer o segredo. Verificar confirma que o token foi assinado pela parte esperada e não foi adulterado. Um token pode decodificar com sucesso e ainda ser completamente forjado se o servidor pular a verificação de assinatura.
Armazenar JWTs no localStorage
Tokens armazenados em localStorage são acessíveis a qualquer JavaScript rodando na página. Uma única vulnerabilidade XSS em qualquer parte do seu site é suficiente para um atacante roubar todos os tokens ativos. O padrão mais seguro são cookies httpOnly, que o JavaScript não consegue ler de jeito nenhum.
Não Verificar a Claim exp
Aceitar um JWT sem verificar a claim exp (expiração) significa que um token roubado ou vazado é válido indefinidamente. Tokens de acesso devem ter vida útil curta — 15 minutos é a boa prática de 2026 — combinados com um fluxo de refresh token. Cole seus tokens aqui para confirmar que o exp está definido com um valor razoável.
Usar alg: none em Produção
Algumas bibliotecas JWT de anos anteriores aceitavam tokens com "alg": "none" no header, significando que nenhuma assinatura era necessária. Um atacante poderia modificar o payload e remover a assinatura completamente. Bibliotecas modernas rejeitam alg: none por padrão, mas vale auditar código legado que faz validação JWT manual.
Colocar Dados Sensíveis no Payload
O payload é apenas codificado em Base64URL, não criptografado. Qualquer pessoa com a string do token — incluindo DevTools do navegador, logs de proxy e logs de acesso de CDN — pode decodificá-lo instantaneamente. Nunca armazene senhas, números de cartão de crédito, CPF ou outros dados pessoais em um payload JWT. Use JWE se precisar embutir dados sensíveis.
Tokens de Curta Duração Sem Lógica de Refresh
Definir um exp muito curto (ex.: 5 minutos) é uma boa prática de segurança, mas sem um mecanismo de refresh token os usuários são desconectados inesperadamente. Implemente refresh silencioso de token para que a experiência do usuário seja fluida enquanto a janela de segurança permanece estreita.
Perguntas Frequentes
Por que o payload JWT é visível sem nenhuma chave?
O payload é apenas codificado em Base64URL, não criptografado. Qualquer pessoa que tenha a string do token pode decodificar e ler o payload sem nenhuma chave. A assinatura apenas prova que o token foi emitido por alguém com o segredo correto — ela não esconde o conteúdo. Nunca armazene dados sensíveis em um payload JWT a menos que use JSON Web Encryption (JWE).
Posso decodificar um JWT sem a chave secreta?
Sim — decodificar e verificar são operações completamente separadas. Decodificar apenas faz Base64URL-decode do header e payload, o que não requer nenhuma chave. Verificar confere se a assinatura corresponde ao header + payload usando o segredo ou chave pública. Você sempre pode ler o que um token afirma, mas não pode confirmar se é genuíno sem a chave.
O que acontece se eu colar um JWT expirado?
A ferramenta ainda decodifica completamente e exibe o payload inteiro. A claim exp é mostrada ao lado da data legível correspondente, deixando óbvio que a expiração está no passado. O token está expirado, mas seu conteúdo ainda é legível — útil para depurar exatamente quais claims foram emitidas antes do token expirar.
Qual a diferença entre HS256 e RS256?
HS256 é um algoritmo simétrico: a mesma chave secreta é usada tanto para assinar o token quanto para verificá-lo. RS256 é assimétrico: uma chave privada assina o token, e uma chave pública diferente verifica. RS256 é preferido em sistemas distribuídos onde múltiplos serviços precisam verificar tokens sem nunca receber o segredo de assinatura. HS256 é mais simples e rápido para cenários de serviço único.
Como verifico se um token JWT expirou?
Cole o token aqui — a claim exp é automaticamente renderizada como data legível e comparada com o horário atual. Se o token estiver expirado, você verá o timestamp de expiração exibido claramente ao lado do valor Unix bruto (ex.: 1740000000 (2025-02-20T...)).
Meu token JWT ou segredo é enviado para algum servidor?
Não. Toda a decodificação e verificação acontece inteiramente no seu navegador usando JavaScript e a Web Crypto API. Seus tokens, segredos e dados do payload nunca saem do seu dispositivo. A ferramenta também funciona completamente offline após o carregamento da página.
Recursos
- jwt.io — A referência canônica de JWT e debugger interativo, mantido pela Auth0.
- IETF RFC 7519 — JSON Web Token (JWT) — A especificação oficial que define o formato JWT, nomes de claims e regras de processamento.
- Auth0 — Introdução aos JSON Web Tokens — Um guia prático amplamente citado sobre estrutura, assinatura e padrões de uso de JWT.