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
- Cola o código de emissão, verificação, refresh e logout, substituindo antes qualquer segredo real.
- Indica que tipo de cliente consome a API e onde guarda o token.
- 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
| Gravidade | Excerto | Risco | Correção |
|---|---|---|---|
| Alta | jwt.verify(token, secret) | Sem lista explícita de algoritmos: dependes das predefinições da biblioteca | algorithms: ['HS256'] |
| Alta | — | iss e aud não são validados: aceita-se um token emitido para outro serviço | issuer e audience |
| Média | req.user = payload | Confia-se no payload inteiro | Copiar só sub e role |
| Média | — | verify lança exceções que ninguém apanha | try/catch e 401 genérico |
| [COMPLETAR] | — | Não se vê a emissão, o refresh nem o logout | Preciso 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.