Menu

Decodificador JWT

Disseca e verifica JSON Web Tokens parte por parte.

Última atualização

Algoritmo
CodificadoCole um JSON Web Token
Decodificado
Cabeçalho e payload aparecem aqui — os tokens nunca saem do seu navegador.

O que é um decoder de JWT?

Um decoder de JWT separa um JSON Web Token nas suas três partes — header, payload e assinatura — e faz o decode em Base64URL das duas primeiras para você lê-las como JSON. É uma ferramenta que todo dev acaba usando o tempo todo: na hora de debugar login, autorização, claims de sessão e problemas de expiração de token.

Decodificar um JWT *não* é o mesmo que confiar nele. O header e o payload são legíveis de propósito — eles estão apenas codificados em Base64URL, não criptografados. Quem garante que o token foi assinado por quem deveria e não foi adulterado é a verificação da assinatura.

Um JWT tem o formato header.payload.signature. Cada parte é codificada em Base64URL e separada por pontos. O header informa qual algoritmo de assinatura foi usado, o payload carrega as claims (quem é o usuário, quando o token expira, o que ele pode fazer) e a assinatura permite que o servidor confirme que o token não foi alterado.

O que você vai aprender decodificando JWTs

  • Um JWT tem três partes em Base64URL separadas por ponto: header.payload.signature.
  • Claims comuns como sub, role, iat, nbf e exp descrevem identidade, permissões, momento de emissão e momento de expiração.
  • Qualquer pessoa pode editar o payload decodificado — só a assinatura permite ao servidor detectar a adulteração.

Como decodificar um JWT passo a passo

  1. Cole o token completo

    Cole o JWT no campo de entrada. Ele deve ter o formato xxxx.yyyy.zzzz — três partes em Base64URL unidas por pontos.

  2. Leia o header

    O header informa o algoritmo de assinatura (alg) e o tipo do token. Cuidado com "alg": "none" — significa que o token não está assinado e não pode ser confiável.

  3. Leia as claims do payload

    O payload é o JSON com todas as claims. Procure por sub (id do usuário), exp (expiração), iat (emitido em) e por claims customizadas que sua aplicação adiciona, como role ou tenant.

  4. Confira a expiração

    Converta o timestamp Unix do exp para data — se estiver no passado, o token está expirado e qualquer API minimamente correta vai rejeitá-lo.

  5. Verifique a assinatura (opcional)

    Se você tiver o segredo ou a chave pública, cole no verificador para confirmar se a assinatura é válida. O conteúdo do token só é confiável quando a assinatura bate.

Claims padrão do JWT

Estas são as claims registradas, definidas pela especificação do JWT (RFC 7519). Qualquer aplicação pode adicionar suas próprias claims customizadas além dessas.

ClaimNomeSignificado
issIssuer (Emissor)Quem criou e assinou o token
subSubject (Sujeito)Sobre quem é o token — geralmente o id do usuário
audAudience (Audiência)Para quem o token é destinado
expExpiration (Expiração)Timestamp Unix após o qual o token deixa de valer
nbfNot Before (Não Antes De)O token não deve ser aceito antes desse momento
iatIssued At (Emitido Em)Quando o token foi criado
jtiJWT IDIdentificador único — útil para revogação
algAlgorithm (no header)Algoritmo de assinatura: HS256, RS256, ES256, …

Exemplos de JWT para testar

Inspecionar um JWT típico

Token

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ1c2VyXzEyMyIsInJvbGUiOiJzdHVkZW50IiwiZXhwIjoxNzEwMDAwMDAwfQ.Q3hH8yzqI2OsHJ1Lyj8jJfJPa5ZpIVlh1FhJpJbqMcs

Header
{  "alg": "HS256",  "typ": "JWT"}
Payload
{  "sub": "user_123",  "role": "student",  "exp": 1710000000}

O header indica HS256 (algoritmo com segredo compartilhado). O payload identifica o usuário, o papel dele e quando o token expira. A assinatura é a terceira parte. (Esse é um token de demonstração — a assinatura não vai bater com nenhum segredo real.)

Verificar se um token está expirado

Claim do payload
{  "exp": 1710000000}

exp é um timestamp Unix em segundos. Converta para uma data — se estiver no passado, o token está expirado e um backend bem implementado vai recusá-lo.

Identificar o perigoso algoritmo "none"

Header
{  "alg": "none",  "typ": "JWT"}

Se um servidor aceita "alg": "none", um atacante pode forjar qualquer payload sem precisar de assinatura. Sempre rejeite esse header em produção.

Erros comuns ao usar JWT

  • Colocar senhas, segredos ou dados pessoais sensíveis dentro do payload. JWT é legível, não criptografado.
  • Decodificar um token e sair confiando nele sem checar a assinatura.
  • Confundir a legibilidade do Base64URL com criptografia — o payload do JWT é fácil de ler de propósito.

FAQ sobre JWT

O que é JWT?
JWT é a sigla de JSON Web Token. É um formato de token compacto, assinado e seguro para uso em URL, criado para transportar claims entre duas partes — geralmente entre um servidor e um navegador, representando um usuário logado.
Como faço para decodificar um JWT?
Cole o token em um decoder de JWT, ou divida pelas posições dos pontos e faça Base64URL-decode em cada uma das duas primeiras partes. O header e o payload voltam como JSON; a terceira parte é a assinatura.
Como verifico se um JWT está expirado?
Olhe a claim exp no payload. É um timestamp Unix em segundos. Se o horário atual for maior que exp, o token está expirado.
Qualquer pessoa consegue decodificar um JWT?
Sim. O header e o payload estão codificados em Base64URL, não criptografados. A assinatura só prova que o token não foi adulterado — ela não esconde o conteúdo.
O que significa verificar um JWT?
Verificar é recalcular a assinatura usando o segredo ou a chave pública esperada e comparar com a assinatura presente no token. Se baterem, o payload é confiável e não foi modificado.
Posso guardar senhas dentro de um JWT?
Não. Quem tiver o token consegue ler o payload. Guarde apenas identificadores e claims não sensíveis, e use expirações curtas com refresh tokens para garantir a segurança.

Saiba mais

Outras ferramentas para desenvolvedores

Aprenda a programar com o Coddy

COMEÇAR