Auditar uma autenticação com JWT: erros comuns e código corrigido

Revê a tua implementação de JWT face aos erros habituais (algoritmos, expiração, armazenamento, refresh tokens, revogação) e recebe problemas por gravidade, código corrigido e testes. Pensado para ChatGPT, Claude, Gemini e Microsoft Copilot. Inclui 4 variáveis personalizáveis e pode copiá-lo gratuitamente com um clique.

Avançado · Código · Pendente de revisão editorial

Prompt

Atua como engenheiro de segurança aplicacional especializado em autenticação de APIs.

Revê esta implementação de autenticação com JWT:
{{codigo}}

Contexto:
- Stack e biblioteca JWT: {{stack}}
- Tipo de cliente: {{cliente}}
- Quem emite os tokens: {{emissor}}

Entregáveis:
1. Problemas com gravidade (crítica, alta, média, baixa), excerto afetado, risco explicado numa frase e correção. Verifica no mínimo:
   - Verificação da assinatura com uma lista explícita de algoritmos permitidos; rejeição de `alg: none` e da confusão entre algoritmos simétricos e assimétricos.
   - Validação de `exp`, `nbf`, `iss` e `aud`, com uma pequena margem para desvios de relógio.
   - Duração do access token e uso de refresh tokens com rotação e deteção de reutilização.
   - Revogação e logout: lista de bloqueio, versão de sessão ou tokens de curta duração.
   - Armazenamento no cliente: `localStorage` versus cookie `HttpOnly`, `Secure`, `SameSite`, e a proteção CSRF que cada opção exige.
   - Segredos e chaves: robustez, onde estão guardados, rotação com `kid` ou JWKS.
   - Dados sensíveis no payload (apenas codificado, não cifrado) e tamanho do token.
   - Tratamento de erros: mensagens que não revelem informação e registos sem tokens completos.
2. Código corrigido para a minha stack, com uma biblioteca mantida e sem criptografia feita à mão.
3. Testes automáticos para cada problema crítico ou alto: token expirado, assinatura inválida, `alg` não permitido, audiência errada e refresh token reutilizado.
4. Uma ordem de prioridade das correções se não puder fazer tudo de uma vez.

Restrições:
- Não afirmes que o sistema fica totalmente seguro; recomenda uma revisão de segurança ou teste de intrusão antes de produção se tratar dados sensíveis.
- Se faltar parte do fluxo (emissão, refresh ou logout), pede-ma antes de concluir ou marca como [PREENCHER].
- Nunca reproduzas segredos reais que apareçam no código: substitui-os por marcadores.

Como utilizar

  1. Cola o código de emissão, verificação, refresh e logout, substituindo antes qualquer segredo real.
  2. Indica que tipo de cliente consome a API e onde guarda o token.
  3. Corrige primeiro os problemas críticos e acrescenta os respetivos testes à CI.

Exemplo de utilização

Stack: Node.js com Express e jsonwebtoken · Cliente: SPA noutro subdomínio · Emissor: a própria API · Código: middleware de autenticação e endpoint /refresh.

Exemplo de resultado

1. Constatações

GravidadeExcertoRiscoCorreção
Altajwt.verify(token, secret)Sem lista explícita de algoritmos: dependes das predefinições da bibliotecaalgorithms: ['HS256']
Alta—iss e aud não são validados: aceita-se um token emitido para outro serviçoissuer e audience
Médiareq.user = payloadConfia-se no payload inteiroCopiar só sub e role
Média—verify lança exceções que ninguém apanhatry/catch e 401 genérico
[COMPLETAR]—Não se vê a emissão, o refresh nem o logoutPreciso desse código

2. Código corrigido

const jwt = require('jsonwebtoken');

const VERIFY_OPTS = {
  algorithms: ['HS256'],                 // nunca confiar no alg anunciado pelo token
  issuer: 'https://api.exemplo.pt',      // [COMPLETAR]
  audience: 'spa-exemplo',               // [COMPLETAR]
  clockTolerance: 30,                    // segundos de margem de relógio
};

function requireAuth(req, res, next) {
  const token = req.cookies?.access_token; // cookie HttpOnly, Secure, SameSite
  if (!token) return res.status(401).json({ error: 'unauthorized' });
  try {
    const { sub, role } = jwt.verify(token, process.env.JWT_SECRET, VERIFY_OPTS);
    req.user = { id: sub, role };
    return next();
  } catch {
    return res.status(401).json({ error: 'unauthorized' }); // sem detalhes para o cliente
  }
}

Ler o token de um cookie exige cookie-parser e proteção CSRF nas rotas que alteram dados…

Dados-chave

Categoria
Programação e desenvolvimento · APIs
Tipo de resultado
Código
Nível
Avançado
Pensado para
ChatGPT, Claude, Gemini e Microsoft Copilot
Verificado em
Pendente de verificação editorial
Variáveis
Código atual, Stack e biblioteca, Tipo de cliente e Emissor dos tokens
Idioma
Português
Preço
Gratuito, sem registo
Atualizado
07/11/2026

Perguntas frequentes

É melhor guardar o JWT no localStorage ou num cookie?

O localStorage fica exposto se houver uma vulnerabilidade XSS. Um cookie HttpOnly não é legível por JavaScript, mas exige proteção CSRF e um SameSite bem configurado. O prompt explica o que cada opção implica no teu caso.

Como faço logout se os JWT não podem ser invalidados?

Com access tokens de curta duração e refresh tokens revogáveis no servidor, ou guardando uma versão de sessão por utilizador verificada em cada pedido. Assim cortas o acesso sem esperar que o token expire.

Para que serve este prompt?

Revê a tua implementação de JWT face aos erros habituais (algoritmos, expiração, armazenamento, refresh tokens, revogação) e recebe problemas por gravidade, código corrigido e testes.

Com que ferramentas de IA funciona?

Foi pensado para ChatGPT, Claude, Gemini e Microsoft Copilot. Ainda não o verificámos nestas ferramentas, pelo que os resultados podem variar entre elas.

Como personalizo o prompt?

Clique em “Personalizar” e preencha as variáveis (Código atual, Stack e biblioteca, Tipo de cliente e Emissor dos tokens). O texto atualiza-se instantaneamente e pode depois copiá-lo com um clique. Os valores ficam guardados apenas no seu navegador.

Preciso de experiência para o utilizar?

É de nível avançado: destina-se a pessoas com experiência no tema, capazes de avaliar e ajustar o resultado.

Este prompt é gratuito?

Sim. Todos os prompts do HomeCasa Prompts são gratuitos, sem registo nem subscrição. Pode também utilizá-los em projetos profissionais.

Posso confiar no resultado da IA?

Trate-o como um rascunho de qualidade: verifique sempre os dados, os números e as afirmações importantes antes de publicar ou tomar decisões.

Prompts relacionados