# Simplified Authentik Auth Flow - Design ## Architecture ``` User → Frontend → Authentik (OAuth2) → Backend (Session) → Protected Resources ``` ## Authentication Flow ### 1. Login Initiation ``` GET /auth/login → Redirect to Authentik OAuth authorize URL → State parameter stored in cookie (auth_state) ``` ### 2. OAuth Callback ``` GET /auth/callback?code=...&state=... → Verify state parameter → Exchange code for access token with Authentik → Fetch user info from Authentik /userinfo endpoint → Create/update user in local database → Create session cookie (signed, httpOnly) → Redirect to frontend ``` ### 3. Authenticated Requests ``` Request with session cookie → Verify session signature → Load user from database → Attach user to request context ``` ### 4. Logout ``` GET /auth/logout → Delete session cookie → Optionally revoke token at Authentik → Redirect to frontend ``` ## Session Management ### Session Cookie - **Name**: `session` - **Value**: Signed cookie containing user_id - **Properties**: httpOnly, Secure (production), SameSite=Lax - **Expiry**: Browser session or configurable duration ### Session Store - In-memory or Redis (configurable) - Maps session_id → user_id + expiry - Simple cleanup on expiry ## User Sync On each login: 1. Fetch user info from Authentik `/application/o/userinfo/` 2. Update local user record: - email - name - authentik_id - groups (for future team feature) 3. Create user if not exists ## API Changes ### Removed Endpoints - `POST /auth/refresh` - No refresh tokens needed ### Modified Endpoints - `GET /auth/login` - Simpler, no nonce needed - `GET /auth/callback` - No JWT minting, just session creation - `GET /auth/me` - Return user from session instead of JWT - `POST /auth/logout` - Just clear session cookie ### New Endpoints - None (simplification!) ## Middleware Changes ### Current (to be removed) - JWT decoding - Token expiry checking - Refresh token validation ### New - Session cookie parsing - Signature verification - User loading from database ## Database Changes ### Remove Tables - `refresh_tokens` - No longer needed ### Keep Tables - `users` - Still needed for local user data - `user_configs` - User preferences ## Configuration Changes ### Removed - `JWT_SECRET` - `JWT_ALGORITHM` - `ACCESS_TOKEN_TTL_MINUTES` - `REFRESH_TOKEN_TTL_DAYS` ### Modified - `AUTHENTIK_AUDIENCE` - May not be needed ### Added - `SESSION_SECRET` - For signing session cookies - `SESSION_TTL_HOURS` - Session duration (default: 24) - `SESSION_STORE` - "memory" or "redis" ## Implementation Order 1. **Create session management module** 2. **Simplify auth endpoints** 3. **Update auth middleware** 4. **Remove JWT and refresh token code** 5. **Update frontend auth handling** 6. **Update configuration** 7. **Tests**