Все пользовательские сервисы Gnexus подключаются к центральному SSO — gnexus-auth (Laravel). Сервис не создаёт собственную систему пользователей и не имеет собственной «страницы входа» — в сервисе только гейт (заглушка с кнопкой Войти по OAuth PKCE).
/admin/clients.<сервис>/auth/callback)..env сервиса и в gnexus-creds, не в git.gnexus-auth-client-py (Python), gnexus-auth-client-php (PHP).sub из gnexus-auth; локальная запись пользователя зеркалируется (user_id, email, имя, профиль), профиль gnexus-auth — источник истины./auth/login → callback), scopes openid email profile roles permissions.user.* с HMAC-подписью (см. ниже).profile.locale) — источник языка интерфейса по умолчанию (см. i18n.md)./auth/login только по явному клику — никаких авто-редиректов на загрузку страницы.GET /me → denied (гейт с кнопкой входа) или ready (интерфейс).ghard_session) из SQLite, TTL ~7 суток; state/PKCE тоже в SQLite (oauth_states).401 из API → ивент unauthenticated → сессии нет → гейт (не редирект).GET /me возвращает {auth_enabled, user: {user_id, email, display_name, avatar_url}, locale…}.PATCH /me) — только по cookie-сессии: у Bearer-токенов нет личности (Bearer-админ → 401).Роут /webhooks/gnexus-auth, подпись HMAC в заголовках (t=<ts>,v1=<hmac>), секрет — *AUTH_WEBHOOK_SECRET:
profile хранится verbatim JSON). Не должен затирать локальные override-ы пользователя (например override языка).| Кто | Как | Для чего |
|---|---|---|
| Браузер | cookie-сессия через SSO | UI, PATCH /me |
| Скрипты, MCP, ИИ-агенты | Bearer API-токен сервиса (см. mcp.md) | REST API |
| Машинные агенты | ключи агрегатов (ghm_…, X-Server-Key) |
отдельные каналы (ingest) |
gnexus-auth-client-py, gnexus-auth-client-php10-systems/services/gnexus-auth.md