Перейти к основному содержимому

Интеграции

Зачем нужно

Документ фиксирует, как identity связан с остальной экосистемой, внешними провайдерами, OAuth clients, плагинами, transport providers и observability.

Канонические cross-domain контракты

Входящие интеграции

Внешние OAuth providers

Примеры: Google, GitHub, Telegram, другие SSO providers.

Identity получает:

  • external subject;
  • verified email/phone, если provider это гарантирует;
  • display name;
  • avatar;
  • provider metadata.

Правила:

  • внешний subject не становится внутренним user.id;
  • автопривязка возможна только при надёжной верификации email/phone;
  • provider token не должен попадать в application logs;
  • unlink provider не удаляет основной аккаунт.

Email/SMS providers

Используются transport layer и plugins.

Identity отдаёт:

  • recipient;
  • template;
  • безопасный payload;
  • delivery metadata.

Identity получает:

  • delivery status;
  • bounce/failure;
  • provider error code.

Frontend clients

Фронтенд использует:

  • /auth/*;
  • /me;
  • /platform/navigation;
  • /notifications;
  • admin endpoints по permissions.

Фронтенд не хранит refresh token в небезопасном persistent storage, если выбран cookie/session-based режим.

OAuth clients экосистемы

Сервисы LMS, CRM, storefront, competitions, management и task-bank подключаются как OAuth/OIDC clients.

Identity отдаёт:

  • ID token;
  • access token;
  • userinfo;
  • scopes;
  • claims;
  • JWKS.

Исходящие интеграции

LMS

LMS получает:

  • user identity;
  • family context: familyGroupId, studentProfileId, actor context kind;
  • identity-owned educator_profile и actor context;
  • access context;
  • notification events.

LMS не получает:

  • password hash;
  • refresh token;
  • full audit details;
  • чужие family/organization связи без нужного scope.

CRM

CRM получает:

  • user id;
  • contacts, если есть permission/scope;
  • family context для разделения purchaser/payer и beneficiary;
  • organization memberships;
  • role claims для операторов и преподавателей.

CRM владеет billing и финансовыми сценариями. Identity только подтверждает пользователя и права доступа.

Storefront

Storefront использует:

  • public profile read-model, если пользователь согласился;
  • auth entrypoints;
  • OAuth login для личного кабинета.

Storefront не должен напрямую читать закрытые профили.

Competitions

Competitions использует:

  • user account;
  • student_profile и family adult context;
  • organization, organization_student, membership and team context;
  • identity-owned educator_profile and scoped permissions; external_teacher_profile остаётся competitions-owned;
  • OAuth login.

Олимпиадные участники, регистрации, ответы и результаты остаются в competitions.

Task-bank

Task-bank использует:

  • user identity для авторства и audit;
  • organization/team context для доступа к problem sets/collections;
  • organization permission grants для scoped access.

Задачи, подборки, problem usage, low-level check attempts и checking artifacts остаются в task-bank; LMS/competition attempts и results остаются у своих доменов.

Management

Management получает:

  • агрегированные identity events;
  • audit summaries;
  • role/user activity metrics.

Management не получает секреты, tokens и raw PII без отдельного разрешения.

События

Identity публикует:

  • identity.user.created;
  • identity.user.updated;
  • identity.login.succeeded;
  • identity.login.failed;
  • identity.password.changed;
  • identity.session.revoked;
  • identity.role.assigned;
  • identity.role.revoked;
  • identity.family.created;
  • identity.family_member.added;
  • identity.family_student_profile.created;
  • identity.family_student_profile.linked;
  • identity.delegated_session.started;
  • identity.child_device_authorization.completed;
  • identity.organization.created;
  • identity.organization.member_added;
  • identity.oauth.client_created;
  • identity.oauth.consent_granted;

События не должны содержать секреты, tokens, verification codes и password-related данные.

Scopes и claims

Минимальные scopes:

ScopeЧто разрешает
openidOIDC id token
profileбазовый профиль
emailemail claims
phonephone claims
rolesроли и permissions
familyfamily context
organizationsorganization/team context
offline_accessrefresh token для OAuth client

Claims должны быть минимальными и зависеть от scope, consent и client trust level.

Плагины

Плагины интегрируются через:

  • manifest;
  • plugin controller contract;
  • sandbox;
  • event subscriptions;
  • transport registry;
  • auth method registry;
  • settings schema.

Плагин не может:

  • читать базу напрямую;
  • получать raw secrets других плагинов;
  • обходить auth flow;
  • писать audit logs напрямую без системного сервиса.

Нестандартные случаи

  • OAuth client запрашивает scope, которого нет в allowed scopes;
  • provider вернул verified email, уже связанный с другим user;
  • LMS держит token пользователя после блокировки;
  • transport provider временно недоступен;
  • plugin подписан на событие, но падает во время обработки;
  • organization membership удалён, но downstream service держит старый cache;
  • family link изменился администратором во время активной delegated session;
  • child device authorization был отозван или просрочен до completion.

Готовность

  • для каждого соседнего домена указано, что он получает от identity;
  • scopes и claims описаны;
  • события не раскрывают секреты;
  • plugins и transports работают через contracts;
  • внешние providers не становятся источником истины для внутреннего пользователя;
  • downstream services могут инвалидировать доступ после блокировки пользователя или отзыва роли.