Erros Comuns em JWT que Você Deve Evitar: Guia de Segurança e Boas Práticas

Erros Comuns em JWT que Você Deve Evitar: Guia de Segurança e Boas Práticas




Erros comuns em JWT que você deve evitar


Erros comuns em JWT que você deve evitar

Guia técnico para validação, gestão de chaves, timing de tokens e práticas seguras no uso de JSON Web Tokens.


1) Falta de validação adequada da assinatura e de claims básicas

JWTs são affidáveis apenas quando a assinatura é verificada com a chave correta e as claims são checadas com rigidez. Erros comuns incluem aceitar tokens sem issuer (iss) ou audience (aud), ou permitir algoritmos inadequados.

  • Defina e imponha o algoritmo esperado (ex.: RS256) e evite aceitar o algoritmo ‘none’ ou qualquer configuração não verificada.
  • Valide o emissor (iss) e a audiência (aud) para o seu API ou recurso protegido.
  • Use a chave pública correta via JWKS e consuma-a com verificação baseada em kid.
  • Verifique também o exp, o nbf e o iat apenas quando apropriado para seu fluxo.

Dica prática: prefira bibliotecas que suportem JWKS e validação de claims de forma explícita, evitando validações manuais que podem introduzir falhas.

2) Não tratar expiração, not-before e margem de relógio

Tokens expiram para limitar o tempo de uso. Não validar exp ou ignorar nbf pode abrir brechas. A prática correta envolve uma margem de tolerância (clock skew) para acomodar desajustes entre sistemas.

  • Verifique exp no token com o tempo atual do servidor.
  • Considere nbf caso tokens sejam emitidos com atraso ou pré-uso.
  • Aplicar uma margem de skew (ex.: 60–300 segundos) para evitar falhas por desvio de tempo entre cliente e API.
  • Utilize iat como referência apenas se seu fluxo exigir, evitando dependência excessiva.

Observação: tokens de acesso devem ter vida útil curta; combine com refresh tokens para renovação segura.

3) Gestão de chaves, JWKS e rotação

A prática recomendada é manter um JWKS público/constante e rotacionar chaves com frequência, tratando mudanças de kid como sinal de atualização. Evite hardcode de chaves no código.

  • Utilize um JWKS endpoint confiável para buscar chaves públicas dinamicamente.
  • Cache as chaves com tempo de vida adequado e invalide em caso de rotation através do kid.
  • Implemente verificação de emissor/audiência associada à chave correspondente.


// Exemplo de verificação com JWKS usando a biblioteca jose (Node.js, ESM)
import { jwtVerify, createRemoteJWKSet } from 'jose';

const JWKS = createRemoteJWKSet(new URL('https://example.com/.well-known/jwks.json'));

async function verifyToken(token) {
  try {
    const { payload } = await jwtVerify(token, JWKS, {
      issuer: 'https://issuer.example.com',
      audience: 'my-api',
      algorithms: ['RS256'] // força apenas RS256
    });
    return payload; // token válido
  } catch (err) {
    throw new Error('Token inválido');
  }
}
      

Boas práticas: configure cache adequado para JWKS, trate erros de rotação e registre tentativas de token falhas para monitoramento.

4) Armazenamento, cookies seguros e estratégia de revogação

JWTs são frequentemente usados como tokens de acesso; a forma como são armazenados impacta a superfície de ataque. Combine armazenamento seguro, tokenização de curto prazo e fluxo de refresh com revogação controlada.

  • Use tokens de acesso com vida útil curta e tokens de refresh para renovação; evite manter tokens de longa duração no cliente.
  • Prefira cookies HttpOnly e Secure com SameSite adequado para evitar XSS/CSRF em aplicações web.
  • Implemente uma estratégia de revogação ou validação de estado (ex.: listas de revogação, ou checagem de revoca em um datastore) para tokens comprometidos.
  • Inclua claims como iss, aud e scope para controle mais granular de permissões.

Observação: JWTs não devem ser usados como único mecanismo de revogação; combine com controles de sessão, rotação de chaves e políticas de segurança de tokens.

Leia também

Explore conteúdos complementares para aprofundar prática e segurança ao trabalhar com JWT e autenticação de APIs.

© 2026 yurideveloper.com — Construindo APIs seguras e eficientes. Compartilhe conhecimento e continue explorando nossos posts para aprofundar técnicas, padrões e boas práticas.