Sobre o Decodificador JWT
Este decodificador JWT gratuito lê um JSON Web Token e mostra o header e o payload como JSON formatado, com os horários de emissão e de expiração convertidos em datas legíveis.
A decodificação acontece no seu navegador — o seu token nunca é enviado. Isso não é um detalhe: um JWT normalmente é uma credencial ativa, e colar um token em um site que o envia para algum lugar é entregar todo o acesso que ele dá.
Esta ferramenta decodifica um token. Ela não verifica a assinatura — mais abaixo explicamos por que essa diferença importa.
As três partes de um token
Um JWT são três blocos em Base64url separados por pontos:
xxxxx.yyyyy.zzzzz
Header — qual algoritmo assinou o token e de que tipo ele é. Normalmente dois campos: alg e typ.
Payload — as claims. Sobre quem é o token, quem o emitiu, quando ele expira e tudo mais que a aplicação colocou ali: ID do usuário, e-mail, papéis, permissões, tenant.
Assinatura — uma verificação criptográfica sobre as duas primeiras partes, feita com um segredo ou uma chave privada. Ela prova que o token não foi alterado desde que foi emitido.
O mais importante para entender: as duas primeiras partes não são criptografadas. Elas só são codificadas, e qualquer pessoa consegue ler. Cole um token nesta página e o conteúdo aparece na hora. Base64url é uma forma de deixar os dados seguros para ir em uma URL ou em um header, não uma forma de escondê-los.
O que isso significa para o que você coloca em um token
Como o payload é público para quem tiver o token, a regra é direta: nunca coloque nada secreto em um JWT.
O que não deve ir em um payload: senhas, chaves de API, dados de cartão de crédito, CPF ou outros números de documento, informações médicas, qualquer coisa protegida por leis de privacidade como a LGPD. Tudo isso pode ser lido pelo usuário, por qualquer coisa que registre a requisição em log e por quem conseguir o token.
O que deve ir: um ID de usuário, um papel, uma expiração, um emissor, um público-alvo — identificadores e claims feitos para serem vistos pelo sistema que os recebe.
A assinatura protege a integridade, não a confidencialidade. Ela garante que ninguém alterou o token. Ela não faz nada para impedir que alguém o leia.
Decodificar não é verificar
Essa é a diferença que causa falhas de segurança reais, então vale a pena ser preciso.
Decodificar desempacota o Base64url e mostra o JSON. Não precisa de chave nenhuma, qualquer pessoa pode fazer, e não prova absolutamente nada sobre o token ser legítimo.
Verificar recalcula a assinatura usando o segredo ou a chave pública e confirma que ela bate. Só isso diz que o token foi mesmo emitido por quem ele diz e que não foi adulterado.
Um token pode ser decodificado perfeitamente e ser uma falsificação completa. Qualquer pessoa pode montar um JWT que diga "role": "admin" e ele vai aparecer lindamente aqui — porque mostrar é tudo o que está acontecendo.
Esta ferramenta não verifica de propósito, e essa é a escolha segura: a verificação exige o segredo de assinatura, e colar o seu segredo de assinatura em uma página da web seria muito mais perigoso do que colar um token. A verificação é papel do seu servidor, com a sua chave, usando uma biblioteca adequada.
A versão histórica desse erro é o ataque alg: none. As primeiras bibliotecas de JWT respeitavam um header que dizia que nenhum algoritmo tinha sido usado e aceitavam o token sem verificação. Um atacante podia editar o payload, definir alg como none e entrar. As bibliotecas modernas rejeitam isso, mas é por isso que você deve sempre fixar o algoritmo esperado em vez de confiar no header.
Como ler as claims padrão
A maioria dos nomes de campo curtos em um payload são claims registradas com significado fixo:
- exp — horário de expiração. Depois disso, o token deve ser rejeitado.
- iat — issued at, emitido em. Quando ele foi criado.
- nbf — not before, não antes de. O token é inválido até esse horário.
- sub — subject, o sujeito. Normalmente o ID do usuário.
- iss — issuer, o emissor. Quem criou o token.
- aud — audience, o público-alvo. Para qual serviço ele foi feito.
- jti — ID do token, usado em listas de revogação.
exp, iat e nbf são timestamps Unix — segundos desde 1º de janeiro de 1970 — e é por isso que parecem um número de dez dígitos sem sentido. Esta ferramenta converte esses valores em datas legíveis, o que costuma ser o jeito mais rápido de responder à pergunta que trouxe você aqui: *este token expirou?*
Como usar
- Cole o seu JWT (a string xxxxx.yyyyy.zzzzz)
- Leia o header e o payload decodificados logo abaixo
- Clique em Copiar em qualquer uma das partes, se precisar
Bom saber
- Trate um token como uma senha. Se ele ainda for válido, quem tiver o token pode agir como aquele usuário. Não cole tokens ativos em ferramentas que os enviam, nem publique em um ticket ou em um chat.
- JWTs são difíceis de revogar. Eles valem até expirar, então um token roubado funciona até lá, a não ser que você mantenha uma lista de bloqueio. É por isso que expirações curtas importam.
- Bearer não faz parte do token. Tire esse prefixo de um header Authorization antes de decodificar.
- Base64url não é o Base64 padrão. Ele usa - e _ em vez de + e / e normalmente remove o preenchimento =, e é por isso que um bloco de JWT pode falhar em um decodificador Base64 comum.
- Relógios fora de sincronia causam falhas confusas. Um token pode parecer válido para você e ser rejeitado por um servidor cujo relógio está um ou dois minutos diferente.
- Um JWT não é uma sessão. Ele carrega as próprias claims, então mudanças no papel de um usuário só fazem efeito quando o token expira.
Perguntas frequentes
Um JWT é criptografado?
Não. O header e o payload são codificados em Base64url, o que os deixa seguros para ir em uma URL ou em um header HTTP, mas não os esconde de forma nenhuma. Quem tiver o token consegue ler todas as claims, como esta página mostra. A assinatura protege o token contra alterações, não contra leitura.
Esta ferramenta verifica a assinatura?
Não, e de propósito. Verificar exige o segredo de assinatura ou a chave pública, e colar o seu segredo de assinatura em uma página da web seria bem mais perigoso do que colar um token. A verificação é papel do seu servidor, usando uma biblioteca adequada. Esta ferramenta decodifica e mostra o conteúdo, que é o que você precisa quando está depurando.
É seguro colar o meu token aqui?
Aqui, sim — a decodificação acontece inteiramente no seu navegador e nada é transmitido, então você pode desconectar da internet que ela continua funcionando. Mesmo assim, tome cuidado com ferramentas em geral. Um JWT ativo é uma credencial que funciona, e um site que o envia para um servidor acabou de receber todo o acesso que ele dá.
Como eu sei se o meu token expirou?
Olhe a claim exp, que é um timestamp Unix em segundos. Esta ferramenta converte esse valor em uma data legível e diz diretamente se esse momento já passou. Se um token parece válido para você, mas um servidor rejeita, verifique a diferença entre os relógios — uma diferença de um ou dois minutos entre as máquinas já basta.
O que significam sub, iss, aud e iat?
São claims registradas com significado padrão: sub é o sujeito, normalmente o ID do usuário; iss é o emissor que criou o token; aud é o público-alvo, ou seja, qual serviço deve aceitá-lo; iat é quando ele foi emitido. Junto com exp e nbf, elas cobrem o quem, o onde e o quando.
Por que o meu JWT falha em um decodificador Base64 comum?
Porque um JWT usa Base64url, uma variante que troca + por - e / por _ e normalmente remove o preenchimento =. Essas trocas existem para o valor ficar seguro dentro de uma URL. Destrocando os caracteres, ele é decodificado em uma ferramenta Base64 padrão.
Dá para editar o payload de um JWT?
Dá para mudar o texto, mas o resultado vai ser rejeitado por qualquer servidor bem implementado, porque a assinatura não bate mais com o conteúdo alterado. É exatamente para isso que a assinatura serve. Tokens são emitidos de novo pelo serviço que os assina, não editados à mão.
Ferramentas relacionadas
- Codificar / Decodificar Base64 — a codificação em que os três blocos são escritos
- Formatador JSON — organize e inspecione o payload decodificado
- Gerador de hash — as funções de hash por trás da assinatura