feat(auth): HttpOnly cookie sessions for the web UI #92
Loading…
Reference in a new issue
No description provided.
Delete branch "feat/cookie-sessions"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Behebt das „alle paar Stunden neu einloggen" in der PWA und schließt die localStorage-Token-Lücke — ohne den API-/MCP-Bearer-Flow anzutasten.
Problem
Nach OIDC stellte der Server ein rollendes
__web_session-Token aus, das das SPA im localStorage hielt und alsAuthorization: Bearersendete. Idle-Fenster nur 12 h, und ein Token im localStorage ist per XSS stehlbar.Lösung
Web-Sessions laufen jetzt über ein
HttpOnly; Secure; SameSite=Lax-Cookie (goloom_session). Kein Token mehr im localStorage; das Cookie ist per JS nicht auslesbar.SESSION_TTL(Default 30 Tage), rollend bei jeder Nutzung — in beiden Stores (Rolling-Update +CreateSessionAPIToken) und der Cookie-Max-Age.RequireAuthakzeptiert das Cookie, wenn kein Bearer-Header da ist. Cookie-authentifizierte state-changing Requests brauchen ein Double-Submit-Token (goloom_csrf-Cookie +X-CSRF-Token-Header). Bearer-Requests (API-Tokens/MCP) sind CSRF-exempt und völlig unverändert.303-Redirect (kein Token mehr in der URL/Hash).POST /v1/auth/session/token(Token-/Recovery-Login → Cookie) undPOST /v1/auth/logout(Cookies löschen + Session-Zeile widerrufen).credentials+ CSRF-Header; „eingeloggt?" wird per/v1/me-Probe bestimmt (kein gespeichertes Token); Recovery-Login nutztsession/token; Logout ruft den Endpoint. Das Dev-„Browser session"-Panel behält seinen Bearer-Override.Sicherheit
Tests
RequireAuth;session/token+logout-Lebenszyklus (Cookie HttpOnly, Revoke wirkt);go build/vet/test ./...+make test-postgresgrün.tsc/vite build+eslint(0 errors).cookie-session.spec(HttpOnly-Cookie, kein localStorage-Token, CSRF-loser POST → 403);auth-settings„dieser Browser" auf der Web-Session-Zeile; volle Suite grün (1 bekannter Cross-Spec-Flake, isoliert grün).⚠️ Ops
Produktiv HTTPS erforderlich (Secure-Cookie wird über http verworfen; für lokales
app_env=developmentüber http automatisch gelockert).SESSION_TTLper env konfigurierbar.🤖 Generated with Claude Code