Document BIM session sync canon boundaries

This commit is contained in:
Codex
2026-06-23 20:23:01 +03:00
parent 1aaf53c378
commit f8c19d712a
4 changed files with 50 additions and 1 deletions
+24
View File
@@ -50,6 +50,30 @@ Production login должен быть NODE.DC-branded:
Текущее безопасное решение зафиксировано в `docs/AUTH_BRANDED_LOGIN_RFC.md`: сначала используем Authentik-native Brand/CSS/Flow customization. Reverse proxy HTML-rewrite, password form в Launcher и пересылка пароля через BFF запрещены.
## Inter-app session sync status 2026-06-23
Источник истины по пользовательской сессии остаётся в Launcher/Auth/Authentik chain. Приложения не должны выдавать себе права из локального browser-event или marker-а; любые live-события session sync являются только сигналом для revalidation через платформенный authority.
Фактический общий live-контур до BIM был logout-only:
- Launcher `/auth/session-sync` публиковал `nodedc:session:logout` в соседние приложения через iframe/BroadcastChannel/localStorage/frontchannel;
- Engine helper `src/platform/auth/sessionSync.ts` знает только `nodedc:session:logout`;
- Tasker/OPS имеет отдельный frontchannel/internal logout контур, но login/change parity не оформлен как общий protocol;
- login live promotion открытого приложения после входа в другом surface не был закрытым platform-wide контрактом.
BIM Viewer 23.06.2026 добавил BIM-first login-sync slice для share-link сценария:
- Launcher service registry получил `loginSyncUrl` для BIM;
- после успешного login Launcher публикует `nodedc:session:login` и делает frontchannel вызов зарегистрированных login-sync endpoints;
- BIM `/auth/login-sync` создаёт короткоживущий server-side marker;
- BIM `/api/auth/session` возвращает `loginSyncEventId`, но сам marker не является auth-token;
- BIM frontend по новому marker-у запускает обычный optional-launch/handoff через Launcher, где происходит нормальная проверка сессии и доступа;
- BIM logout приведён к существующему logout canon и должен live-понижать controls до guest/limited view без ручного refresh.
Граница текущей реализации: это кандидат на общий login-sync contract, а не закрытый канон для всей платформы. Перед подключением следующего сервиса нужно оформить `ndcauth.session` protocol: `login`, `logout`, `change`, payload, origin checks, TTL/nonce/correlation, service registry fields, revalidation rules, audit/observability и browser e2e matrix по HUB/OPS/ENGINE/BIM.
Правило для новых сервисов: не добавлять частный per-app login/logout bus. Сервис регистрирует sync endpoints в Launcher/control-plane registry, принимает event только как invalidate/promote trigger и всегда перепроверяет доступ через backend authority.
## Required claims
Минимальный normalized user object: