Pular para o conteúdo principal

ADR 0004 — Cofre de sessão no localStorage

Status

Aceito.

Contexto

A SPA precisa sobreviver a F5 sem re-login, mas gravar JWT em claro no localStorage aumenta o impacto de XSS.

Decisão

Persistir a sessão via sessionVault: payload cifrado no browser, chave derivada de VITE_SESSION_VAULT_SECRET (≥16 caracteres). Sem a variável, há fallback inseguro e um console.warn em produção.

Interceptor global de fetch trata 401 autenticado como sessão expirada.

Consequências

  • XSS ainda é crítico (a chave também está no bundle)
  • Rotação do secret invalida sessões locais (aceitável)
  • Não substitui httpOnly cookies no backend; é mitigação no cliente