NODEDC_PLATFORM/docs/AUTH_MODEL.md

4.1 KiB
Raw Blame History

Auth Model

Identity source

Единственный источник identity: Authentik.

Launcher, Plane и будущие приложения не хранят пароли пользователей и не становятся главным источником truth по логину.

User journey

Целевой production flow:

nodedc.ru marketing site
  -> Войти на платформу
  -> platform login
  -> NODE.DC Launcher
  -> application tiles
  -> Task Manager / future apps

UI платформы не должен показывать пользователю название identity-провайдера. В пользовательских кнопках и текстах используется нейтральное "Войти", "Вход на платформу", "Сессия NODE.DC".

Прямые ссылки на приложения остаются допустимым пользовательским сценарием. Если session нет, приложение или внешний proxy/auth layer должен увести пользователя в login flow и после успешного входа вернуть к исходному приложению.

Required claims

Минимальный normalized user object:

type AuthUser = {
  sub: string;
  email: string;
  name?: string;
  groups: string[];
  entitlements?: string[];
};

Обязательные проверки:

  • iss совпадает с настроенным issuer;
  • aud совпадает с client/application audience;
  • exp не истек;
  • sub непустой и стабилен;
  • email присутствует для user-facing приложений;
  • groups или entitlements содержат требуемый app access.

Groups

Минимальная группа верхнего уровня:

nodedc:superadmin

Launcher:

nodedc:launcher:admin
nodedc:launcher:user

Task Manager:

nodedc:taskmanager:admin
nodedc:taskmanager:user

Future apps:

nodedc:agents:access
nodedc:tender:access
nodedc:onec:access
nodedc:dm:access

Access levels

Уровень 1: Authentik app access.

Отвечает на вопрос, можно ли открыть приложение.

Launcher показывает каталог приложений как витрину, а не скрывает все недоступные плитки. Для приложения без доступа кнопка перехода отключена и отображается состояние "Нет доступа". Это важно для продаж, onboarding и понимания доступных модулей платформы.

Уровень 2: Launcher admin roles.

Отвечает на вопрос, можно ли управлять пользователями, группами, app registry и audit.

Уровень 3: Application roles.

Например, Plane workspace owner/admin/member/viewer. Эти роли остаются внутри Plane.

Launcher backend requirements

Backend должен:

  • хранить Authentik service token только server-side;
  • выполнять admin calls к Authentik API;
  • хранить audit log;
  • возвращать frontend только нормализованные данные пользователя и разрешенные действия;
  • не отдавать access/refresh/service tokens в browser bundle.

Минимальная таблица или эквивалентная модель в Plane:

external_identity_link
  provider = authentik
  authentik_sub
  email
  plane_user_id
  created_at
  last_login_at
  status

Правило миграции:

  • сначала искать link по authentik_sub;
  • если link найден, логинить связанный plane_user_id;
  • если link не найден, но email совпадает и включен migration auto-link, создать link;
  • если доступа нет, вернуть deny.