Decodificador JWT

Cole um JWT (três partes codificadas em base64url separadas por pontos) e o decodificador mostrará o cabeçalho, a carga útil e a assinatura, decodificados e formatados, junto com o algoritmo detectado, a expiração do token no seu horário local e se nbf (não antes), iat (emitido em) e exp (expiração) são consistentes. Verificação de assinatura opcional se você tiver a chave secreta ou chave pública.

Como decodificar um JWT

  1. 1

    Cole o token

    Três strings base64url separadas por `.` (cabeçalho.carga útil.assinatura).

  2. 2

    Leia o cabeçalho decodificado

    Algoritmo, tipo, ID da chave (`kid`). O algoritmo informa qual tipo de chave você precisa para verificação.

  3. 3

    Leia a carga útil

    Reivindicações padrão (`iss`, `sub`, `aud`, `exp`, `iat`, `nbf`, `jti`) mais quaisquer reivindicações personalizadas que seu aplicativo emite.

  4. 4

    Verifique (opcional)

    Forneça a chave secreta HMAC (para HS256/384/512) ou a chave pública (para RS256, ES256, etc.) para confirmar que a assinatura é válida.

Anatomia de um JWT

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
.
eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkFsaWNlIiwiaWF0IjoxNjAwMDAwMDAwfQ
.
SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

Cada segmento é codificado em base64url (não base64 padrão). O cabeçalho é JSON como {"alg":"HS256","typ":"JWT"}, a carga útil é JSON como {"sub":"1234567890","name":"Alice","iat":1600000000}, e a assinatura é a assinatura HMAC ou RSA de cabeçalho.carga útil.

Reivindicações padrão (RFC 7519)

Reivindicação Nome Notas
iss Emissor Quem emitiu o token
sub Assunto Sobre quem é o token
aud Público Para quem é o token
exp Tempo de expiração Timestamp Unix; rejeitado após este tempo
nbf Não antes Timestamp Unix; rejeitado antes deste tempo
iat Emitido em Timestamp Unix da criação do token
jti ID do JWT Identificador único para listas de revogação

Algoritmos suportados

Valor alg Tipo de chave
HS256/HS384/HS512 Chave secreta HMAC compartilhada
RS256/RS384/RS512 Chave pública RSA
ES256/ES384 Chave pública ECDSA
PS256/PS384 Chave pública RSA-PSS
EdDSA / Ed25519 Curva de Edwards
none Nunca confie nisso, tokens não assinados

O pé na porta do alg: none

Bibliotecas JWT antigas permitiam tokens "alg": "none" e os aceitavam ingenuamente como válidos. Sempre:

  • Liste os algoritmos que seu aplicativo aceita.
  • Rejeite alg: none incondicionalmente.
  • Rejeite alg: HS256 quando seu código de verificação espera RS256 (o ataque de “confusão de algoritmo”).

O que o JWT NÃO É

  • Não é criptografado. O cabeçalho e a carga útil são codificados em base64, o que é trivialmente decodificado. Nunca coloque segredos em um JWT sem envolvê-lo em JWE.
  • Não é revogável por padrão. Uma vez emitido, um JWT é válido até exp. Para revogação, você precisa de uma lista negra ou expiração curta + tokens de atualização.
  • Não é um substituto para cookies de sessão para todos os casos de uso. Tokens opacos armazenados no servidor são frequentemente mais simples e seguros.

Erros comuns

  • Confiar no cabeçalho. O kid e alg vêm do próprio token. Um servidor comprometido pode defini-los arbitrariamente; sempre valide contra uma lista fixa.
  • Ignorar a diferença de nbf e iat. A deriva do relógio significa que iat > agora pode acontecer. Permita uma pequena margem (30-60s).
  • Registrar JWTs inteiros. A carga útil frequentemente contém IDs de usuários, e-mails, permissões, PII que não deve acabar no stdout.
  • Usar HS256 com uma chave fraca. Uma chave secreta de 16 caracteres pode ser quebrada em minutos. Use pelo menos 256 bits de entropia aleatória.

Perguntas frequentes

Não. A decodificação ocorre no seu navegador. O token permanece local, importante porque os JWTs frequentemente contêm dados de sessão, IDs de usuários e permissões.

Sim. Se você colar a chave secreta HMAC compartilhada ou a chave pública codificada em PEM, a verificação acontece no seu navegador. A chave nunca sai da sua máquina.

Significa que o token não está assinado. Nunca aceite tais tokens em produção, eles podem ser forjados trivialmente. Vários CVEs de alto perfil foram especificamente sobre bibliotecas que aceitaram alg: none por padrão.

A assinatura JWT prova autenticidade, não confidencialidade. O cabeçalho e a carga útil são codificados em base64url, o que é reversível. Para segredo, use JWE (JSON Web Encryption) ao redor do JWT, ou evite colocar dados sensíveis na carga útil.

Ferramentas relacionadas

Ferramenta disponível em outros idiomas