ФУНКЦИИ - МЕЖПРОЕКТНАЯ КОММУНИКАЦИЯ: Branded Authentik login

This commit is contained in:
Codex
2026-05-04 21:17:23 +03:00
parent cfccdf6ddb
commit bac4f62bce
8 changed files with 1003 additions and 2 deletions
+77
View File
@@ -0,0 +1,77 @@
# NODE.DC branded login RFC
## Цель
Пользователь должен видеть единое окно входа NODE.DC в визуальной логике текущего Plane login: темный фон, компактная карточка, NODE.DC logo, крупный заголовок, email/password, яркая CTA-кнопка.
При этом Authentik остается внутренним identity provider и продолжает владеть паролями, MFA, recovery, lockout, session, OAuth/OIDC и audit events.
## Жесткие запреты
Запрещенные варианты реализации:
- reverse proxy, который переписывает HTML Authentik на лету;
- frontend-only форма в Launcher, которая принимает email/password;
- BFF endpoint в Launcher, который принимает пароль пользователя и пересылает его в Authentik;
- OAuth password grant / ROPC;
- хранение паролей, refresh tokens или Authentik session cookies в frontend/localStorage;
- обход Authentik CSRF, MFA, recovery, lockout, enrollment и audit flow.
Эти варианты расширяют trusted boundary платформы: Launcher становится обработчиком паролей, а это ломает разделение ответственности и усложняет аудит.
## Выбранный безопасный путь
Базовый production-safe путь: Authentik-native branded flow.
- UI кастомизируется через Brand/Flow внутри Authentik.
- `branding_custom_css` задает NODE.DC look без HTML-прокси.
- Password stage, Identification stage, User Login stage, MFA/recovery остаются штатными Authentik stages.
- Identification stage связан со штатным Password stage, поэтому email и password показываются в одном Authentik challenge без передачи пароля в Launcher.
- Launcher и Task Manager остаются OIDC clients и не получают пароль пользователя.
- Direct links на Launcher/Task Manager продолжают идти через Authorization Code Flow + PKCE.
- OAuth2 provider end-session использует штатный Authentik invalidation flow с UserLogoutStage, чтобы пользователь не попадал на Authentik application logout dashboard.
Если Brand/CSS не даст pixel-level соответствие Plane login, следующий допустимый уровень — кастомный Authentik template/flow executor внутри Authentik deployment. Это тоже остается IdP-side custom UI, но требует отдельной security review при каждом upgrade Authentik.
## Runtime prototype
Локальный bootstrap настраивает Brand для `auth.local.nodedc`:
- title: `NODE.DC`;
- default authentication flow: `default-authentication-flow`;
- flow title: `Работайте во всех измерениях.`;
- default locale: `ru`;
- theme: `dark`;
- dark NODE.DC CSS из `/templates/branding/nodedc-login.css`;
- без изменения password/MFA/recovery mechanics.
Файлы:
- `infra/authentik/bootstrap-dev.py` — idempotent Brand/Flow bootstrap;
- `infra/authentik/custom-templates/branding/nodedc-login.css` — native Authentik Brand CSS.
## Security acceptance
Перед переводом в production нужно проверить:
- пароль не проходит через Launcher/BFF/network logs вне Authentik;
- CSRF token и Authentik cookies остаются штатными;
- MFA/passkeys/recovery/enrollment работают после стилизации;
- failed login/lockout/audit events остаются в Authentik;
- logout/SLO закрывает Launcher и app sessions;
- прямой заход `task.local.nodedc` и `launcher.local.nodedc` возвращает пользователя после login;
- UI не содержит слова `authentik` в пользовательском flow;
- кастомизация переживает restart контейнеров и повторный bootstrap;
- fallback admin URL к Authentik остается доступен только как служебный контур.
## Upgrade policy
Brand/CSS считается безопасным maintenance layer. Template override считается повышенным риском: перед обновлением Authentik нужно прогонять visual/security regression, потому что DOM web components может измениться.
## Источники
- Authentik Flows: https://docs.goauthentik.io/docs/add-secure-apps/flows-stages/flow/
- Authentik Stages: https://docs.goauthentik.io/docs/flow/stages
- Password stage: https://docs.goauthentik.io/add-secure-apps/flows-stages/stages/password/
- Custom CSS: https://docs.goauthentik.io/brands/custom-css/
- Single Logout: https://docs.goauthentik.io/add-secure-apps/providers/single-logout/
+2
View File
@@ -48,6 +48,8 @@ Production login должен быть NODE.DC-branded:
Запрещено делать быстрый frontend-only password form, который обходит IdP protections, хранит секреты в браузере или ломает MFA/recovery/audit.
Текущее безопасное решение зафиксировано в `docs/AUTH_BRANDED_LOGIN_RFC.md`: сначала используем Authentik-native Brand/CSS/Flow customization. Reverse proxy HTML-rewrite, password form в Launcher и пересылка пароля через BFF запрещены.
## Required claims
Минимальный normalized user object: