Web e codificação · 6 min de leitura
JWT decodificador: o que está dentro de um token e o que não
Um Web Token JSON consiste em três segmentos base64url separados por pontos, e um decodificador JWT simplesmente inverte a codificação para que você possa lê-los. A última frase contém o fato de segurança mais importante deste artigo: decodificar um token não prova nada sobre isso. Qualquer um pode criar uma carga útil, codificá-la e entregar a você um token bem formado – a verificação é uma operação separada que requer a chave de assinatura.
Atualizado
As três partes
- Cabeçalho — o algoritmo de assinatura (`alg`) e o tipo de token (`typ`), por exemplo HS256.
- Carga útil — as reivindicações: de quem se trata o token, quando foi emitido e quando expira.
- Assinatura – calculada nos dois primeiros segmentos com a chave do emissor, razão pela qual um decodificador a mostra, mas não pode verificá-la.
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9 . eyJzdWIiOiIxMjMiLCJleHAiOjE3NjAwMDAwMDB9 . signature
header payload signature
As afirmações que explicam a maioria das falhas
- `exp` (expiração) — a causa mais comum de um 401. Um token que expirou há dois minutos é rejeitado antes que qualquer outra coisa seja examinada.
- `nbf` (não antes) — a imagem espelhada: um token usado antes de sua janela de validade ser rejeitado.
- `iat` (emitido em) — útil para calcular a idade de uma sessão e para detectar relógios que discordam.
- `aud` (público) e `iss` (emissor) — incompatibilidades aqui significam que o token é válido, mas foi emitido para um serviço diferente, que falha de maneira confusa.
As reivindicações de tempo são segundos UTC desde a época Unix. Se um token parecer válido, mas expirar muito cedo ou tarde demais, verifique se há um problema de relógio ou uma carga transportando milissegundos onde segundos eram esperados.
Por que você nunca deve confiar cegamente em `alg`
Dois ataques têm idade suficiente para serem famosos e ainda aparecerem na natureza. O algoritmo `none` informa ao verificador que não há assinatura alguma; um servidor que lê o cabeçalho em vez de impor seu próprio algoritmo esperado o aceita. E na confusão RSA/HS, um invasor assina com a chave pública como um segredo HMAC, enganando um servidor que aceita ambas as famílias. A defesa em ambos os casos reside no verificador, não no decodificador: fixa o algoritmo esperado no lado do servidor e nunca o deriva do próprio token.
Decodifique localmente, sempre
Um JWT é uma credencial: quem a possui pode atuar como usuário até que ela expire. Colar um real em um site que o publica em um servidor entrega uma sessão ao vivo sem nenhum benefício, já que a decodificação é uma aritmética base64url que qualquer navegador pode fazer em microssegundos. O decodificador YamlBox JWT analisa o token na página, mostra as declarações de carimbo de data/hora como datas UTC legíveis e continua trabalhando com a rede desativada — o único tipo de decodificador que vale a pena usar em um token de produção.
Uma rotina de depuração que funciona
- Decodifique e leia `exp` primeiro — metade de todos os relatórios de “token inválido” termina aqui.
- Verifique `aud` e `iss` em relação ao que API espera e depois `nbf` para verificar a distorção do relógio.
- Compare as declarações decodificadas com o que seu código assume sobre funções ou escopos.
- Se as declarações parecerem corretas e ainda assim falharem, o problema é a verificação – chave errada, segredo girado ou incompatibilidade de algoritmo.
JWT Decodificador — perguntas frequentes
A decodificação de um JWT verifica isso?
A decodificação inverte a codificação base64url e não precisa de chave, portanto não pode provar a autenticidade. A verificação recalcula a assinatura com a chave secreta ou pública do emissor e é uma etapa separada que somente o servidor pode realizar.
Por que meu JWT já expirou?
Verifique a reivindicação `exp` em relação ao horário UTC atual. Os tokens geralmente duram pouco – minutos a uma hora – e um cliente que os armazena em cache em uma janela de atualização é o culpado usual. Compare `iat` com `exp` para ver a vida útil pretendida pelo emissor.
É seguro colar um JWT de produção em um decodificador online?
Somente em um que seja totalmente decodificado em seu navegador. Um decodificador do lado do servidor recebe uma credencial ativa e pode registrá-la. Prefira um decodificador do lado do cliente e trate qualquer token colado em um site desconhecido como comprometido.
Ferramentas mencionadas nesta postagem
Mais artigos para ler
5 min de leitura
Base64 decodificar e codificar: para transporte, não para
Base64 decodifique e codifique no navegador — a regra de tamanho 4/3, preenchimento, a variante base64url e o bug do Unicode que faz o texto decodificado parecer lixo.
5 min de leitura
URL codificação: quando escapar e quando você está quebrando
URL codificar e decodificar corretamente — caracteres reservados, mais versus %20, encodeURI versus encodeURIComponent e os bugs de codificação dupla por trás de links quebrados.
5 min de leitura
Conversor de carimbo de data/hora: época sem suposições
Um conversor de carimbo de data/hora Unix que funciona nos dois sentidos — segundos versus milissegundos, UTC versus hora local e o limite de 2038 que ainda quebra sistemas de longa duração.