1. Access + refresh
Access token curto (5–15 min) para API. Refresh token longo, rotacionado, guardado com mais cuidado. Não use um único JWT eterno.
2. Emitir com cuidado
// Node exemplo (biblioteca jsonwebtoken)
const access = jwt.sign(
{ sub: user.id, role: user.role },
process.env.JWT_SECRET,
{ algorithm: "HS256", expiresIn: "10m" }
);
ATENÇÃO Nunca aceite
alg: none. Fixe o algoritmo na verificação. Troque segredos com rotação documentada.3. Validar de verdade
- Verificar assinatura e algoritmo
- Checar
exp,nbf,iss,aud - Autorizar por papel/escopo no endpoint, não só “token válido”
jwt.verify(token, secret, {
algorithms: ["HS256"],
issuer: "https://api.exemplo.com",
audience: "app"
});
4. Onde guardar no browser
LocalStorage é simples e vulnerável a XSS. Cookie HttpOnly + Secure + SameSite reduz roubo via JS. Em SPAs, combine CSP forte e refresh em cookie.
5. Checklist
- HTTPS em todo o caminho
- Access curto + refresh rotativo
- Algoritmo fixo na validação
- Rate limit em login e refresh
- Plano de revogação (deny-list ou versionamento de token)