diff --git a/CLAUDE.md b/CLAUDE.md index ec99829..f85d598 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -39,7 +39,7 @@ - Токены — opaque; каждый запрос API валидируется через userinfo. Креды клиента (GAUTH_CLIENT_ID/SECRET) — только в `.env`, в UI авторизация никак не конфигурируется. - TLS gnexus-auth в LAN self-signed: `GAUTH_VERIFY_TLS=false` по умолчанию; в проде с нормальным сертификатом — `true`. - **Single sign-out** (правило владельца): выход из gnexus-auth обязан завершать сессию в Synapse. Прямой logout в gnexus-auth НЕ отзывает OAuth-токены (access до 30 мин, refresh 30 дней переживают logout) — поэтому callback сохраняет выданные токены в Redis по user_id (`store_login`), а вебхук `auth.logout`/`auth.global_logout`/`session.revoked` отзывает их все. SPA-poll `/api/v1/admin/me` каждые 45 c: 401 → уход на /login. Выход из Synapse (`POST /auth/logout`) тоже отзывает входы пользователя; завершение самой SSO-сессии (RP-initiated logout) — TODO в gnexus-auth, зафиксировано в #32. -- Локальная разработка: gnexus-auth = `http://gnexus-auth.local` (в контейнерах — `extra_hosts: host-gateway` в compose), API на `localhost:8012`. +- Локальная разработка: gnexus-auth = `http://gnexus-auth.local` (в контейнерах — `extra_hosts: host-gateway` в compose), API на `localhost:8013` (порт задаёт `SYNAPSE_PORT`), dev-сервер SPA — 5174. - Токен передаётся `Authorization: Bearer` — cookie не годятся (сессия gnexus-auth не выходит за пределы auth-сервера); SPA-клиент хранит access/refresh сам (docs 18–20 описывают клиентскую сторону). ## GNexus UI Kit diff --git a/frontend/src/App.vue b/frontend/src/App.vue index f6394a6..31976e1 100644 --- a/frontend/src/App.vue +++ b/frontend/src/App.vue @@ -1,36 +1,125 @@