Decodificador JWT

Decodifique um JSON Web Token para ler o header e o payload.

100% privado — funciona inteiramente no seu navegador. Seus dados são processados no seu dispositivo e nunca enviados para a internet.

Header
Payload

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

Tutorial em vídeo

Adicionamos novas ferramentas com frequência — inscreva-se no YouTube para ser avisado a cada lançamento.

Mais ferramentas

Ver tudo

Aplicativos recomendados

Ver tudo