Decodificador de JWT

Cole um JSON Web Token para ver o cabeçalho, o payload e a expiração. A decodificação acontece localmente; seu token nunca é enviado para lugar nenhum.

Funciona 100% no seu navegador. Nada do que você cola é enviado ou armazenado.

Cabeçalho

Payload

Claims

A assinatura é exibida, mas não é verificada: a verificação exige a chave secreta ou pública, que você nunca deve colar em um site.

Como usar o decodificador de JWT

  1. Cole um JSON Web Token, a string longa que normalmente vem depois de Authorization: Bearer.
  2. O cabeçalho e o payload são decodificados e exibidos como JSON formatado.
  3. Claims de tempo como exp, iat e nbf são convertidas em datas legíveis, para você ver de relance se o token já expirou.
Privacidade: Nunca cole tokens de produção num site em que você não confia; um token válido pode ser reutilizado por qualquer pessoa que o veja, até ele expirar. Este decodificador roda inteiramente no seu navegador: o token nunca é enviado, registrado nem armazenado. Mesmo assim, prefira tokens de teste e revogue qualquer token que você suspeite ter sido exposto.

Anatomia de um JWT

Um JSON Web Token, especificado na RFC 7519, é uma forma compacta de transmitir claims entre as partes. A forma assinada mais comum (JWS) tem três partes separadas por pontos:

header.payload.signature

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjMifQ.<signature>
  • Cabeçalho (header): JSON que descreve o token, principalmente o algoritmo de assinatura. eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9 decodifica para {"alg":"HS256","typ":"JWT"}.
  • Payload: JSON com as claims, as afirmações sobre o usuário ou a sessão.
  • Assinatura (signature): calculada sobre o cabeçalho e o payload codificados, com um segredo (HMAC, por exemplo HS256) ou uma chave privada (por exemplo RS256, ES256).

Cada parte é codificada em base64url, o alfabeto Base64 seguro para URLs, sem preenchimento. É por isso que os tokens contêm - e _ e que os JWTs quase sempre começam com eyJ: é assim que fica codificado o {" de abertura de um objeto JSON quando vem em seguida um nome de chave típico em minúsculas. Você pode explorar a própria codificação com o codificador Base64.

Claims registradas

ClaimNomeSignificado
issIssuer (emissor)Quem criou e assinou o token.
subSubject (assunto)A quem o token se refere, normalmente um ID de usuário.
audAudience (público)Para qual ou quais serviços o token se destina.
expExpiration time (expiração)Timestamp Unix a partir do qual o token deve ser rejeitado.
nbfNot before (não antes de)Timestamp Unix antes do qual o token ainda não é válido.
iatIssued at (emitido em)Timestamp Unix de quando o token foi criado.
jtiJWT IDIdentificador único, útil para impedir a reutilização.

Todas elas são opcionais na RFC 7519; cada aplicação decide quais exige. As claims de tempo são em segundos, e não em milissegundos; o conversor de timestamp Unix explica a diferença.

Armadilhas comuns

Decodificar não é verificar

Qualquer pessoa pode decodificar um JWT; é exatamente isso que esta ferramenta faz. Decodificar mostra o que um token afirma, e não se essas afirmações são verdadeiras. O servidor precisa verificar a assinatura com a chave correta e conferir exp, nbf, iss e aud antes de confiar em qualquer coisa do payload.

O payload não é secreto

Um JWT assinado pode ser lido por qualquer pessoa que o tenha. Não coloque no payload senhas, dados pessoais que você não exporia ao cliente nem segredos internos. Se o conteúdo precisar ser confidencial, use um JWT criptografado (JWE) ou mantenha os dados no servidor.

alg: none e confusão de algoritmo

As especificações JOSE definem um valor "alg": "none" para tokens não protegidos, com assinatura vazia. Uma biblioteca que obedece ao cabeçalho do próprio token pode aceitar um token forjado como este:

{"alg": "none", "typ": "JWT"}
{"sub": "admin"}
(assinatura vazia)

Um ataque relacionado muda um token de RS256 para HS256, de modo que a chave pública seja usada indevidamente como segredo HMAC. A defesa para os dois é a mesma: configure no servidor os algoritmos permitidos e nunca deixe o token escolher.

Dicas

  • Use tokens de acesso de curta duração e refresh tokens para sessões mais longas.
  • Aceite uma pequena diferença entre relógios (clock skew; por exemplo, um minuto) ao verificar exp e nbf entre servidores.
  • Use uma biblioteca de JWT bem mantida em vez de analisar e verificar tokens manualmente.

Perguntas frequentes

Esta ferramenta consegue verificar a assinatura de um JWT?

A verificação exige o segredo ou a chave pública do emissor e precisa acontecer no seu backend. Esta ferramenta serve para inspecionar o cabeçalho e as claims de um token durante a depuração.

Por que meu token aparece como expirado?

A claim exp é anterior ao horário atual do seu dispositivo. Confira se o seu relógio está certo e se o emissor escreveu o exp em segundos.

Os JWTs são criptografados?

Os JWTs assinados (JWS), a grande maioria dos que estão em uso, são apenas codificados e assinados, então qualquer pessoa pode lê-los. Os JWTs criptografados (JWE) têm cinco partes em vez de três.

É seguro colar meu token aqui?

A decodificação acontece localmente e nada é transmitido. Como regra geral, evite colar tokens de produção ativos em qualquer ferramenta online que você não tenha analisado.

Atualizado

Copiado para a área de transferência