Files
HexaHost-GameCloud/docs/adr/0002-session-authentication.md
smueller 58961000eb
Some checks failed
CI / Node — lint, typecheck, test, build (push) Failing after 9s
CI / Go — node-agent tests (push) Failing after 21s
CI / Go — edge-gateway build (push) Successful in 13s
Phase1
2026-06-26 11:31:54 +02:00

1.2 KiB

ADR 0002: Session-based authentication with HttpOnly cookies

Status

Accepted — 2026-06-26

Context

Phase 1 requires secure user authentication without binding to external identity providers. The web app (Next.js) and API (NestJS) run on different origins in development (localhost:3000 / localhost:3001) but share credentials via CORS.

Decision

  • Use opaque session tokens (32 random bytes), stored as SHA-256 hash in UserSession.
  • Deliver sessions via HttpOnly cookie hgc_session with SameSite=lax and Secure in production.
  • Password hashing with Argon2id via @node-rs/argon2.
  • TOTP 2FA with otplib; recovery codes stored hashed.
  • Login challenges for 2FA stored in Redis (5 min TTL).
  • Transactional emails via BullMQ notifications queue processed by worker + SMTP.

Consequences

  • Browser clients must use credentials: 'include'.
  • API CORS must allow APP_URL with credentials.
  • Session revocation is immediate via DB revokedAt.
  • No JWT in localStorage (reduces XSS token theft risk).

Alternatives considered

  • JWT in Authorization header — rejected for Phase 1 due to refresh complexity and XSS exposure in SPA storage.
  • External auth (Auth0, Clerk) — rejected per product requirements.