Pare de usar JSON Web Tokens para sessões de utilizador
Os desenvolvedores estão a debater se os JSON Web Tokens (JWTs) são apropriados para gerir sessões de utilizador em aplicações web, especialmente single-page applications. Muitos argumentam que o problema não é o JWT em si; os riscos reais vêm de os armazenar em locais acessíveis por JavaScript, como `localStorage`, de proteção fraca contra XSS e da dificuldade de revogar tokens, levando alguns a preferir sessões tradicionais do lado do servidor ou JWTs armazenados em cookies `HttpOnly`, `SameSite`. Outros observam que os JWTs ainda fazem sentido em sistemas distribuídos e APIs, mas sublinham que devem ser usados com modelos de ameaça claros, tempos de vida curtos e implementação cuidadosa para evitar armadilhas de segurança comuns.
Âmbito do Debate
- Muitos argumentam que o artigo é realmente sobre XSS e escolhas de armazenamento, e não sobre os JWTs em si.
- Esclarecimento repetido: JWT é apenas um formato de token; pode ser usado com cookies ou outro armazenamento, e não é inerentemente oposto a “sessões baseadas em cookies”.
Onde Armazenar o Estado da Sessão
- Corrente forte: armazenar identificadores de sessão/JWTs em cookies
HttpOnly,Secure,SameSite.- Protege contra roubo direto do token por XSS.
- Evita o trabalho manual de configurar cabeçalhos; o browser envia os cookies automaticamente.
- Crítica ao
localStorage/ armazenamento acessível por JavaScript:- Facilmente exfiltrado por XSS; especialmente problemático para refresh tokens de longa duração.
- Algumas frameworks (Firebase, Cognito) usam por padrão
local/IndexedDB e não podem usarHttpOnly.
- Visão minoritária:
localStorageé “aceitável” porque XSS significa “fim de jogo” de qualquer forma, e atacantes ainda podem abusar de cookies através de pedidos no browser.
CSRF, SameSite e Cookies
- Recomendação: definir
SameSiteem cookies sensíveis.Laxé muitas vezes visto como suficiente para proteção contra CSRF;Strictpode quebrar o comportamento de estar autenticado na primeira página.
- Há alguma confusão sobre como posts de formulários cross-site interagem com cookies;
SameSiteé apontado como o controlo.
Modelo de Ameaça de XSS
- Um lado: se JavaScript pode ser injetado, o atacante já pode agir como o utilizador (enviar pedidos), então cookie vs
localStorageimporta pouco. - O outro lado:
HttpOnlyainda limita de forma significativa o dano ao impedir a exfiltração e reutilização do token a partir de outro dispositivo; defesas em camadas importam.
Design de JWT e Revogação
- Vantagens dos JWTs citadas:
- Validação sem estado; bom para APIs, sistemas distribuídos e microserviços.
- Serviços a jusante podem autorizar via JWT sem consultar uma base de dados de autenticação a cada vez.
- Grande desvantagem: difícil de revogar / terminar sessão:
- Padrão típico: access tokens de curta duração + refresh tokens de longa duração, muitas vezes com refresh tokens opacos e verificados na base de dados.
- Quando se adicionam listas de revogação ou verificações em base de dados, perde-se parte dos benefícios “sem estado”; alguns questionam por que usar JWT nessa altura.
- Vários recomendam IDs de sessão opacos simples em cookies, convertendo para JWTs apenas internamente em gateways.
Preocupações Legais / UX / Práticas
- Esclarecimento de que cookies funcionais/de sessão geralmente não requerem banners de consentimento; há confusão em torno da “diretiva de cookies.”
- Alguns queixam-se de orientação de segurança absolutista (por exemplo, timeouts muito curtos) prejudicar a usabilidade.
- Outros criticam artigos do tipo “Pare de usar X” que não oferecem alternativas claras, práticas ou nuance.