tools.poderoso.io
← poderoso.io

Decodificador de JWT online

·decodifica JWT. Header e payload visíveis
// cole seu token jwt

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