## TASK-033 — Session token returned in JSON body alongside HttpOnly cookie **Severity:** Medium ### Where found `backend/app/routers/auth.py` — `login()` returns `LoginResponse(token=signed_token, expires_at=expires_at)` in the JSON body **and** sets the HttpOnly cookie. `backend/app/models/auth.py` — `LoginResponse.token` field. ### Why this is needed The `LoginResponse` JSON body contains the full signed session token. JavaScript running on the page (including third-party analytics scripts or a future XSS injection) can read the response body from a `fetch()` call and store the token in `localStorage` or a non-HttpOnly cookie. The Bearer-header authentication path (`Authorization: Bearer `) then allows using that extracted token, completely bypassing the protections provided by the HttpOnly cookie. ### Goal Prevent the session token from being accessible to JavaScript when using cookie-based authentication. ### What to do 1. For browser SPA consumers: Remove the `token` field from `LoginResponse`. The HttpOnly cookie is the only token the browser needs. 2. If an API-first (non-browser) token flow is required, create a separate endpoint `POST /api/auth/token` that returns a token in the body and does **not** set a cookie. Document this endpoint as "for programmatic API clients only, not for browser use". 3. Update the frontend — verify that `AuthProvider` does not use `response.token` (confirmed: it currently does not). ### Possible traps and issues - Any existing API client that relies on the token in the `LoginResponse` body will break. Check tests. - The `expires_at` field in `LoginResponse` is useful for the frontend to know when to prompt for re-login — this can remain. - The Bearer-token path in `require_auth` (`Authorization: Bearer`) remains functional for programmatic clients using the dedicated token endpoint. ### Docs changes needed - `Features.md` — document the authentication flow (cookie for browser, token endpoint for API clients). - `Backend-Development.md` — authentication endpoint design. - `Web-Development.md` — document that the frontend uses only the HttpOnly cookie. ### Doc references - [Features.md](Features.md) — authentication - [Backend-Development.md](Backend-Development.md) — auth router design - [Web-Development.md](Web-Development.md) — AuthProvider