Sem upload, 100% local, sem conta

Tutorial

Como decodificar um JWT sem vazá-lo

Um token JWT carrega dados reais: o usuário para quem foi emitido, as permissões que concede, a sua data de expiração. Colá-lo em um decodificador online qualquer significa entregar esses dados, e muitas vezes uma sessão ainda válida, a um servidor que você não controla. O decodificador abaixo roda inteiramente no seu navegador: você pode ler o que há dentro de um token, verificar se ele expirou e confirmar uma assinatura HMAC quando conhece o segredo, tudo isso sem que uma única requisição de rede saia da sua aba.

Passo a passo

  1. Abra o decodificador de JWT e cole o token na caixa de entrada. Um JWT são três blocos em Base64Url unidos por pontos: cabeçalho, payload e assinatura. Você pode colá-lo com o prefixo Bearer ou sem ele; a ferramenta lê a estrutura nos dois casos e avisa de imediato se o formato estiver errado.
  2. Leia o cabeçalho e o payload decodificados. O cabeçalho mostra o algoritmo de assinatura (por exemplo HS256 ou RS256) e o identificador da chave quando presente. O payload lista os claims: para quem o token foi emitido (sub), quem o emitiu (iss) e os carimbos de tempo. A ferramenta converte os campos numéricos iat, nbf e exp em datas legíveis e sinaliza se o token ainda é válido ou já expirou.
    Um JWT decodificado mostrando o algoritmo do cabeçalho e os claims do payload com datas de emissão e expiração legíveis
  3. Se o token usa HS256 e você possui o segredo compartilhado, cole esse segredo no campo de verificação e clique em Verificar. A ferramenta recalcula o HMAC sobre o cabeçalho e o payload e o compara com a assinatura, de modo que você descobre se o token é autêntico ou foi adulterado. Para tokens RS256 ou ES256, a assinatura depende de uma chave privada que você não tem; por isso a ferramenta inspeciona os claims mas não afirma verificar a assinatura.
    O campo de verificação HMAC preenchido com o segredo compartilhado e um selo de assinatura válida para um token HS256

Por que nunca colar um token em um site qualquer

Um JWT não é criptografado. O cabeçalho e o payload estão apenas codificados em Base64Url, o que significa que qualquer pessoa que receba o token pode ler todos os claims que ele contém: e-mail, identificador de usuário, papéis, sinalizadores internos. Se o token for um token de acesso que ainda não expirou, quem o tiver pode reutilizá-lo e agir em seu nome até ele expirar. Ao colar um token ativo em um decodificador hospedado, você envia tudo isso para os registros daquele servidor. Decodificar o token na sua própria máquina, sem nenhum envio, é a única forma de inspecioná-lo sem ampliar o círculo de quem pode vê-lo. Você pode confirmar que não há tráfego abrindo o painel de rede enquanto decodifica.

O que a assinatura pode e não pode lhe dizer

A assinatura é o que impede alguém de alterar os claims e sair impune. Em um token HS256, o mesmo segredo assina e verifica, então se você conhece o segredo pode confirmar plenamente a autenticidade do token aqui mesmo. Em tokens RS256 e ES256, uma chave privada assina o token e apenas a chave pública correspondente o verifica; a chave privada nunca sai do emissor, de modo que uma ferramenta no lado do cliente pode ler os claims mas não pode provar honestamente a assinatura sem essa chave pública. Trate o payload decodificado como uma afirmação feita pelo emissor, não como uma prova, até que a assinatura seja conferida por quem possui a chave de verificação. Para gerar hashes ou comparar segredos à parte, o gerador de hash deste site também funciona localmente.

Estrutura do JWT e o que cada parte revela

Um JWT é composto por três segmentos codificados em Base64url separados por pontos: cabeçalho, payload e assinatura. O cabeçalho declara o tipo do token ("JWT") e o algoritmo: HS256 (HMAC-SHA-256, um segredo compartilhado) ou RS256 (RSA-SHA-256, um par de chaves pública/privada) são os mais comuns. O payload carrega claims como `sub` (assunto, geralmente um ID de usuário), `iat` (timestamp Unix de emissão), `exp` (timestamp Unix de expiração), `aud` (audiência pretendida) e claims personalizados da aplicação como papéis ou escopos. Base64url não é criptografia: é uma variante do Base64 segura para URLs que substitui `+` por `-` e `/` por `_`, e omite o preenchimento. Qualquer pessoa que possua a string do token bruto pode decodificar o cabeçalho e o payload sem a chave de assinatura. Apenas o segmento de assinatura exige a chave para verificação. É por isso que colar um token de produção ativo em um decodificador online externo representa um risco de segurança: se o `exp` do token ainda estiver no futuro e o serviço registrar a entrada, a sessão que ele representa pode ser comprometida.

As ferramentas usadas neste guia

Perguntas frequentes

Meu token é enviado a algum servidor quando eu o decodifico?

Não. O decodificador divide o token, decodifica o cabeçalho e o payload em Base64Url e os exibe na memória. A verificação HMAC opcional usa a API Web Crypto integrada ao seu navegador. Nada trafega pela rede, o que importa porque um JWT costuma conter dados pessoais e uma sessão ainda ativa. Abra o painel de rede do navegador enquanto decodifica e você não verá nenhuma requisição sair.

Esta ferramenta pode verificar uma assinatura RS256 ou ES256?

Não totalmente, e ela não vai fingir. HS256 usa um único segredo compartilhado para assinar e verificar, então colar esse segredo permite à ferramenta confirmar a assinatura no navegador. RS256 e ES256 usam uma chave privada para assinar e uma chave pública distinta para verificar; a ferramenta lê e valida os claims e a expiração, mas não chega a afirmar uma assinatura que não pode conferir. Para esses tokens, verifique no serviço que possui a chave pública.

Fontes