JWTs são o formato de token de autenticação mais comum em aplicações web. Toda vez que você faz login, uma API emite um JSON Web Token que carrega sua identidade, permissões e frequentemente dados pessoais. Quando algo dá errado — uma sessão expirada, uma requisição rejeitada, um colega perguntando “o que tem neste token?” — o primeiro instinto é decodificá-lo.
A maioria dos decodificadores JWT online funciona. A questão é se você deve confiar neles com seu token.
O que realmente tem em um JWT
Um JWT são três strings codificadas em base64url separadas por pontos:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NSIsIm5hbWUiOiJBbGljZSIsImlhdCI6MTUxNjIzOTAyMn0.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
Decodifique as duas primeiras partes e você obtém JSON:
// Cabeçalho
{
"alg": "HS256",
"typ": "JWT"
}
// Carga útil
{
"sub": "12345",
"name": "Alice",
"iat": 1516239022
}
A assinatura é um hash criptográfico que prova que o token foi emitido por alguém com o segredo. Qualquer pessoa pode decodificar a carga útil — essa não é a fronteira de segurança. A fronteira é se você pode verificar a assinatura.
Decodificação vs verificação
Esta distinção importa:
- Decodificação = decodificação base64 do JSON para que você possa ler. Nenhum segredo necessário. Qualquer pessoa pode fazer.
- Verificação = verificar a assinatura contra um segredo conhecido para confirmar que o token não foi adulterado. Requer o segredo.
A maioria dos decodificadores online apenas decodifica. Eles mostram o cabeçalho e a carga útil mas nunca pedem seu segredo — porque não estão verificando, apenas exibindo.
Para depuração (quais claims este token tem, quando expira), decodificação é suficiente. Para autenticação, você precisa de verificação — e deve acontecer em infraestrutura que você controla.
Claims JWT padrão para verificar
Quando você decodifica um JWT, procure estes claims registrados:
| Claim | Significado | O que verificar |
|---|---|---|
exp |
Hora de expiração (timestamp Unix) | Está no futuro? |
nbf |
Não antes de (timestamp Unix) | Está no passado? |
iat |
Emitido em (timestamp Unix) | Quanto tempo o token tem? |
iss |
Emissor | Corresponde ao seu servidor de auth? |
aud |
Audiência | Corresponde à sua API? |
sub |
Assunto (ID do usuário) | É o usuário esperado? |
A razão mais comum para um token “válido” falhar: ele expirou. Verifique exp primeiro.
Como decodificar um JWT no seu navegador
Você não precisa de uma ferramenta de terceiros para isso. Um JWT são apenas três strings base64url. Mas se você prefere não memorizar o comando de decodificação, um decodificador baseado no navegador faz a mesma coisa sem enviar seu token:
- Cole o JWT no decodificador
- Veja o cabeçalho, carga útil e assinatura decodificados
- Verifique o claim
exppara ver se o token expirou - Verifique se o algoritmo no cabeçalho corresponde ao esperado
O decodificador JWT no DevSpeedTools roda inteiramente no seu navegador. Nenhuma requisição de rede, nenhum upload, nenhum registro. Abra DevTools → Network, cole um token e confirme que nada sai da sua máquina.
Quando você precisa de verificação (não apenas decodificação)
Se você está depurando um problema de autenticação e precisa saber se o token é válido — não apenas o que ele contém — você precisa verificar a assinatura. Isso deve acontecer com o mesmo segredo ou chave pública que seu servidor de auth usa.
Opções que não envolvem colar seu segredo em um site:
- Node.js:
jsonwebtoken.verify(token, process.env.JWT_SECRET) - Python:
jwt.decode(token, key, algorithms=['HS256']) - Go:
token, err := jwt.Parse(tokenString, keyFunc) - CLI:
jwt-cli(Rust) oupyjwtcom um comando de uma linha
Nunca cole um segredo de produção em uma ferramenta online. O token não é um segredo. O conteúdo frequentemente é.
Resumo
- Use um decodificador baseado no navegador para inspeção rápida. Sem upload, sem vazamento.
- Use CLI ou seu próprio código para verificação. Nunca cole um segredo em um site.
- Verifique
expprimeiro — tokens expirados são a causa da maioria dos problemas “meu token parou de funcionar”.