Decodificador de JWT online
O decodificador de JWT abre um token e mostra o cabeçalho e o payload em texto legível, com as datas já convertidas. É o que você usa quando precisa saber por que uma requisição voltou 401.
As três partes do token
Um JWT, definido pela RFC 7519, tem cabeçalho, payload e assinatura, separados por ponto e codificados em Base64URL. O cabeçalho diz o algoritmo, o payload carrega as claims e a assinatura, definida pela RFC 7515, garante que ninguém alterou o conteúdo.
As duas primeiras partes são apenas codificadas, não cifradas: qualquer pessoa com o token lê o payload. Por isso nunca se coloca senha, número de cartão ou dado sensível dentro de um JWT. Ele é assinado, não secreto.
Isto é um leitor, não um validador
A ferramenta decodifica e exibe. Ela não verifica a assinatura, porque isso exigiria a chave secreta, que não deve sair do seu servidor. Um token expirado ou com assinatura falsa é decodificado normalmente aqui, então nunca tome a leitura como prova de que o token é legítimo.
As claims de tempo, exp, iat e nbf, vêm em epoch conforme a RFC 7519. Elas são convertidas para data legível, que é geralmente onde está a resposta: o token expirou.
Os erros que a especificação de boas práticas cataloga
A RFC 8725 existe porque JWT foi implementado errado muitas vezes, sempre do mesmo jeito. O caso mais conhecido é aceitar alg none, em que o token diz que não tem assinatura e a biblioteca acredita. O outro é confusão de algoritmo: o servidor espera RS256, o atacante manda HS256 e a biblioteca usa a chave pública como se fosse segredo compartilhado.
A defesa é sempre a mesma: o verificador decide o algoritmo, nunca o token. E confira aud e iss, não só exp, senão um token válido emitido para outro serviço é aceito pelo seu.
Nada do que você cola aqui sai do seu navegador. O processamento é todo local, em JavaScript, sem envio para servidor, sem log e sem armazenamento. O token não é enviado para servidor nenhum, o que importa porque um JWT válido é uma credencial.
Perguntas frequentes
O decodificador verifica a assinatura?
Não. Verificar exige a chave secreta ou a chave pública do emissor, que não deve circular. Aqui o token é apenas lido, o que basta para inspecionar claims e datas.
Meu token é enviado para algum servidor?
Não. A decodificação acontece inteiramente no navegador. Isso é importante porque um JWT válido dá acesso, e colar um token em um site que o transmite é entregar a credencial.
Por que consigo ler o conteúdo de um JWT sem a chave?
Porque JWT é assinado, não criptografado. A assinatura prova que o conteúdo não foi alterado, mas não esconde nada. Qualquer um decodifica o payload, então dado sensível não deve estar ali.
O que é o ataque de alg none?
É quando o token declara que não tem assinatura e a biblioteca aceita sem verificar. A RFC 8725 recomenda que o verificador fixe o algoritmo esperado e ignore o que o token declara.
Verificar exp é suficiente?
Não. Sem checar aud e iss, um token válido emitido para outro serviço, ou por outro emissor, é aceito pelo seu. As três claims precisam ser verificadas juntas.
Referências
- RFC 7519 (JSON Web Token)A especificação do formato e das claims registradas, exp, iat, nbf, aud e iss entre elas.
- RFC 7515 (JSON Web Signature)Como a assinatura é construída e verificada.
- RFC 8725 (JWT Best Current Practices)O catálogo dos erros de implementação conhecidos e como se defender de cada um.
- RFC 4648 (Base64URL)A codificação usada nas três partes do token, que não é o Base64 comum.