Copiado com sucesso!

Decodificador JWT (JSON Web Token)

Esta ferramenta permite decodificar e inspecionar tokens JWT (JSON Web Token). Cole seu token e veja o conteúdo do cabeçalho, payload e informações de expiração. Não é necessário estar conectado à internet, pois o processamento ocorre inteiramente no seu navegador.
Cabeçalho (Header)
Payload (Conteúdo)
Assinatura (Signature)

O que é um JWT?

JWT (JSON Web Token) é um padrão aberto (RFC 7519) que define uma maneira compacta e independente de transmitir informações entre partes como um objeto JSON. Essas informações podem ser verificadas e confiáveis porque são assinadas digitalmente.

Um token JWT consiste em três partes separadas por pontos (.)

  • Cabeçalho (Header): Contém informações sobre como o JWT foi gerado, incluindo o algoritmo de assinatura utilizado.
  • Payload (Conteúdo): Contém as declarações (claims) que são afirmações sobre uma entidade (tipicamente, o usuário) e dados adicionais.
  • Assinatura (Signature): Gerada usando o cabeçalho e o payload codificados, com um segredo ou chave pública/privada.

Os JWTs são amplamente utilizados para autenticação, troca de informações seguras e autorização em aplicações web modernas, especialmente em APIs RESTful e microsserviços. Eles permitem que servidores verifiquem a autenticidade das informações recebidas sem necessidade de consultar um banco de dados.

Visualização Detalhada
Verificação de Expiração
Processamento Local
Formatação JSON

Campos Comuns em JWTs

Os tokens JWT contêm vários campos padronizados (claims) que definem propriedades como período de validade e emissor.
sub (subject)
Identifica o sujeito do token, geralmente o ID ou nome do usuário
exp (expiration time)
Timestamp Unix que define quando o token expira
iss (issuer)
Identifica o emissor do token, como um servidor de autenticação
iat (issued at)
Timestamp Unix que indica quando o token foi emitido

Perguntas Frequentes

Sim, esta ferramenta é segura para decodificar seus tokens JWT, pois todo o processamento ocorre localmente no seu navegador. Considerações importantes sobre segurança:

  • Processamento local: Os tokens que você cola são processados inteiramente no seu próprio navegador. Nenhum dado é enviado a qualquer servidor.
  • Nenhum armazenamento: Seus tokens não são armazenados em nenhum lugar após você sair desta página.
  • Código aberto: O código desta ferramenta é transparente e executa apenas operações de decodificação base64.

Entretanto , é importante lembrar que um token JWT, mesmo sem a assinatura, ainda contém informações decodificáveis por qualquer pessoa. A parte da "segurança" de um JWT está na verificação da assinatura, não na confidencialidade do conteúdo. Portanto:

  • Nunca compartilhe tokens JWT válidos em fóruns públicos, chats ou com terceiros não confiáveis
  • Trate seus tokens JWT como credenciais, pois eles concederão acesso aos seus recursos
  • Utilize tokens JWT com tempos de expiração adequados para seu caso de uso

Esta ferramenta é projetada para ajudar desenvolvedores e usuários a entenderem o conteúdo dos seus tokens JWT para fins de depuração e educação.

Os tokens JWT utilizam timestamps Unix (segundos desde 1° de janeiro de 1970) para controlar sua validade. Os principais campos relacionados ao tempo são:

  • exp (expiration time): Define quando o token expira e não deve mais ser aceito pelos servidores. É obrigatório em muitas implementações.
  • iat (issued at): Indica quando o token foi emitido. Útil para saber há quanto tempo um token está em uso.
  • nbf (not before): Especifica a partir de qual momento o token deve ser considerado válido, ou seja, não deve ser aceito antes deste timestamp.
  • jti (JWT ID): Não é um timestamp, mas um identificador único para o token, útil para prevenção de replay attacks e revogação.

Considerações sobre expiração:

  • Tokens de curta duração: Geralmente usados para sessões ativas (minutos a horas), oferecendo maior segurança mas exigindo renovações frequentes.
  • Tokens de longa duração: Usados para "lembrar-me" e outros recursos de persistência (dias a semanas), são mais convenientes mas apresentam maior risco se comprometidos.
  • Refresh tokens: Padrão em que tokens de acesso têm vida curta, mas podem ser renovados com um token de atualização de vida mais longa.

A verificação de timestamps é crucial em sistemas que usam JWT, pois previne o uso de tokens expirados. Nossa ferramenta converte automaticamente esses timestamps Unix para datas legíveis e verifica se o token está expirado.

O campo "alg" no cabeçalho de um JWT especifica qual algoritmo foi usado para gerar a assinatura. Existem vários algoritmos suportados, cada um com características diferentes:

Algoritmos HMAC (baseados em chave simétrica):

  • HS256 : HMAC com SHA-256 - O mais comum, usa uma chave secreta compartilhada
  • HS384 : HMAC com SHA-384 - Similar ao HS256, mas com hash mais robusto
  • HS512 : HMAC com SHA-512 - A versão mais segura dos algoritmos HMAC

Algoritmos RSA (baseados em chave assimétrica):

  • RS256 : RSA com SHA-256 - Usa par de chaves público/privada, ideal para APIs
  • RS384 : RSA com SHA-384
  • RS512 : RSA com SHA-512

Algoritmos ECDSA (Criptografia de curva elíptica):

  • ES256 : ECDSA com P-256 e SHA-256 - Mais eficiente que RSA para o mesmo nível de segurança
  • ES384 : ECDSA com P-384 e SHA-384
  • ES512 : ECDSA com P-521 e SHA-512

Algoritmos sem assinatura:

  • none : Sem assinatura - INSEGURO e não deve ser usado em produção

Considerações de segurança:

  • HMAC (HS*) requer que o servidor de verificação possua a mesma chave secreta que o emissor
  • RSA (RS*) e ECDSA (ES*) permitem verificação com chave pública, sendo ideais para APIs públicas
  • O algoritmo "none" é extremamente vulnerável e não deve ser aceito em sistemas de produção
  • Vulnerabilidades como "alg":"none" e "alg":"HS256" com chave pública conhecida já resultaram em sérias brechas de segurança

A escolha do algoritmo correto depende do seu caso de uso específico, mas geralmente RS256 é recomendado para APIs web modernas, enquanto HS256 é adequado para sistemas mais simples onde o emissor e verificador são o mesmo serviço.

Não, esta ferramenta não verifica a validade da assinatura do JWT. A verificação de assinatura requer o segredo ou chave pública usada na criação do token, que não está disponível para esta ferramenta. O que nossa ferramenta faz:

  • Decodifica o cabeçalho e o payload do JWT (que são apenas Base64URL codificados)
  • Exibe a assinatura em formato Base64URL, mas não a valida
  • Verifica se o token está expirado baseado no campo "exp" comparado à hora atual
  • Formata os dados do token de maneira legível

Por que a verificação de assinatura é importante?

A assinatura é o que torna o JWT seguro - ela garante que o conteúdo não foi alterado desde que foi emitido por uma fonte confiável. Sem validar a assinatura:

  • Não há garantia que o token foi emitido por uma fonte legítima
  • O conteúdo poderia ter sido manipulado
  • Qualquer pessoa poderia criar um token falso com qualquer conteúdo

Como verificar assinaturas JWT corretamente:

Para verificar assinaturas JWT adequadamente, você precisa:

  • Para algoritmos HMAC (HS256/384/512): Usar o mesmo segredo que foi usado para criar o token
  • Para algoritmos RSA/ECDSA (RS*/ES*): Usar a chave pública correspondente à chave privada usada para assinar
  • Usar bibliotecas JWT confiáveis que implementam corretamente os padrões de segurança

Esta ferramenta é útil para decodificar e inspecionar o conteúdo de JWTs, mas em ambientes de produção, sempre use bibliotecas específicas para JWT que verificam adequadamente as assinaturas antes de confiar no conteúdo de um token.

Ao trabalhar com JWTs, é importante seguir estas melhores práticas de segurança:

  1. Use expirações curtas: Configure tokens para expirar rapidamente (minutos a horas), reduzindo a janela de oportunidade em caso de comprometimento.
  2. Implemente refresh tokens: Use tokens de acesso de vida curta com refresh tokens para renovação, permitindo revogação.
  3. Escolha algoritmos adequados: Prefira RS256, ES256 sobre HS256 para APIs públicas. Nunca aceite o algoritmo "none".
  4. Armazene segredos e chaves com segurança: Proteja chaves de assinatura usando práticas robustas de gestão de segredos.
  5. Valide todos os campos: Sempre verifique iss (emissor), exp (expiração), aud (audiência) e outros claims relevantes.
  6. Não armazene informações sensíveis: Lembre-se que o payload é apenas codificado, não criptografado. Evite senhas e dados confidenciais.
  7. Use HTTPS: Sempre transmita JWTs através de conexões criptografadas para evitar ataques man-in-the-middle.
  8. Implemente uma lista de tokens revogados: Mantenha um mecanismo para invalidar tokens específicos antes da expiração.
  9. Proteja contra ataques de injeção: Valide cuidadosamente todos os inputs antes de incluí-los em um token.
  10. Monitore e audite: Registre eventos de autenticação e autorização para detectar comportamentos suspeitos.

Vulnerabilidades comuns a serem evitadas:

  • Algorithm Confusion Attack: Não permita que o cliente especifique qual algoritmo usar.
  • JWT sem validação de assinatura: Sempre verifique completamente a assinatura antes de confiar no conteúdo.
  • "kid" parameter injection: Valide cuidadosamente o parâmetro "kid" no cabeçalho para evitar directory traversal.

Seguir estas práticas ajudará a garantir que sua implementação de JWT seja segura e robusta contra ataques comuns.