Guia Completo de Segurança JWT: Decodificação, Verificação e Vulnerabilidades Comuns

Utilitários

O Que É JWT?

JWT (JSON Web Token) é um padrão aberto (RFC 7519) para transmitir informações com segurança entre partes. É o esquema de autenticação de API mais popular, amplamente usado por OAuth 2.0 e OpenID Connect.

Estrutura do JWT

Um JWT tem três partes separadas por .:

eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxMjM0NTY3ODkwIn0.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
│        Header        │.│         Payload        │.│        Signature        │
Parte Conteúdo Codificação
Header Algoritmo + tipo Base64URL
Payload Claims Base64URL
Signature Assinatura Algoritmo(Header + Payload, Segredo)

⚠️ Header e Payload são apenas codificados em Base64URL—não são criptografados. Qualquer pessoa pode decodificá-los e lê-los.


Decodificar JWT com ToolsKu

Passos

  1. Abra o Decodificador JWT
  2. Cole a string JWT
  3. Veja o Header e Payload JSON decodificados
  4. Verifique expiração, emissor e outros campos

Campos Comuns do Payload

Campo Significado Exemplo
sub Sujeito (ID do usuário) "user_12345"
iss Emissor "https://auth.example.com"
aud Audiência "api.example.com"
exp Expiração (segundos Unix) 1717200000
iat Emitido em 1717196400
nbf Não antes de 1717196400
jti ID do JWT (identificador único) "a1b2c3d4"

Algoritmos de Assinatura JWT

Algoritmo Tipo Segurança Caso de Uso
HS256 Simétrico Média Serviço único, APIs internas
HS384/HS512 Simétrico Média–alta Requisitos de segurança mais altos
RS256 Assimétrico Alta Multi-serviço, OAuth
ES256 Assimétrico Alta Mobile, IoT
none Sem assinatura ❌ Perigoso Nunca use

Simétrico vs Assimétrico

HS256 (simétrico):
  Assinar: HMAC-SHA256(header.payload, shared_secret)
  Verificar: Mesmo shared_secret
  Problema: Todos os serviços compartilham um segredo—um vazamento afeta tudo

RS256 (assimétrico):
  Assinar: RSA-SHA256(header.payload, private_key)
  Verificar: RSA-SHA256(header.payload, public_key)
  Vantagem: A chave pública pode ser distribuída; a chave privada fica com o emissor

Vulnerabilidades de Segurança Comuns

1. Ataque alg: none

Um atacante muda o alg do Header para none e remove a Assinatura:

// Header Original
{"alg": "HS256", "typ": "JWT"}

// Modificação do atacante
{"alg": "none", "typ": "JWT"}

Defesa: O servidor deve ter uma lista de permissão de algoritmos permitidos e rejeitar none.

2. Ataque de Confusão de Chaves

Trocar RS256 por HS256 e usar a chave pública como segredo HMAC:

Atacante obtém chave pública → muda alg para HS256 → assina com chave pública → servidor verifica HMAC com chave pública → passa

Defesa: Validar estritamente que o alg do Header corresponde ao esperado.

3. Vazamento de Dados Sensíveis

Como o Payload é apenas codificado em Base64, nunca armazene em JWT:

  • ❌ Senhas, números de cartão de crédito
  • ❌ Informações pessoais privadas
  • ✅ ID do usuário, funções, permissões

4. Expiração Inadequada

// ❌ Sem expiração — token válido para sempre
{"sub": "user_123"}

// ❌ Expiração muito longa — token vazado permanece válido
{"sub": "user_123", "exp": 1893456000}  // ano 2030

// ✅ Expiração razoável + fluxo de refresh
{"sub": "user_123", "exp": 1717200000}   // 15–60 minutos

Melhores Práticas JWT

1. Access Token de Curta Duração + Refresh Token

Access Token:  Expiração de 15–60 minutos, usado para chamadas API
Refresh Token: Expiração de 7–30 dias, usado para obter novos access tokens

2. Local de Armazenamento

Armazenamento Risco XSS Risco CSRF Recomendado
localStorage Alto Baixo
sessionStorage Alto Baixo
HttpOnly Cookie Baixo Alto ⚠️ Precisa de proteção CSRF
Variável em memória Baixo Baixo ✅ Recomendado para SPAs

3. Lista de Verificação

Ao validar JWT no servidor, sempre verifique:

  • A assinatura é válida
  • exp não expirou
  • nbf está em vigor
  • iss é o emissor esperado
  • aud inclui o serviço atual
  • alg está na lista de permissão

Depuração de Problemas JWT

  1. Decodificar JWT: Use o Decodificador JWT para inspecionar Header e Payload
  2. Verificar exp: O token expirou?
  3. Verificar alg: O algoritmo de assinatura corresponde ao esperado?
  4. Verificar iss/aud: O emissor e a audiência estão corretos?
  5. Verificar assinatura: Use o Gerador JWT para reassinar com o mesmo segredo e comparar
  6. Verificar transporte: O header Authorization é Bearer <token>?

Ferramentas Relacionadas


Resumo

JWT é uma pedra angular da autenticação API moderna, mas a codificação Base64 (não criptografia) cria desafios de segurança únicos. Compreender a estrutura, assinatura e vulnerabilidades comuns é essencial para desenvolvedores full-stack. O decodificador JWT do ToolsKu ajuda você a depurar autenticação rapidamente—mas lembre-se: decodificar não é verificar; sempre valide assinaturas no servidor em produção.

#JWT#认证#安全#OAuth#API