# Подготовка через SCIM {#scim-provisioning}

Tuist поддерживает подготовку через SCIM 2.0, что позволяет поставщику удостоверений автоматически создавать, обновлять и отзывать доступ членам организации.

SCIM настраивается на вкладке **Аутентификация** в настройках вашей организации. Токен SCIM — это токен аккаунта, принадлежащий организации, с правами доступа только к SCIM; он отображается только один раз при создании.

> [!NOTE]
> SCIM управляет членством и жизненным циклом. Он не заменяет <.localized_link href="/guides/integrations/authentication/sso">единый вход (SSO)</.localized_link>. Настройте SSO отдельно, если подготовленным пользователям также нужно входить через ваш поставщик удостоверений.

Подготовленные пользователи уже являются членами организации. Когда они входят с тем же адресом электронной почты, это членство может установить доверие для связывания их идентичности у поставщика. <.localized_link href="/guides/integrations/authentication/sso#verify-a-login-email-domain">проверенный домен электронной почты для входа</.localized_link> и <.localized_link href="/guides/integrations/authentication/sso#choose-an-enrollment-policy">политика регистрации</.localized_link> контролируют пользователей, которые еще не были подготовлены или добавлены в организацию.

## Okta {#okta}

Okta использует два отдельных приложения для Tuist:

- **Веб-приложение OIDC** для входа в Tuist.
- Приложение **SCIM 2.0 Test App (Header Auth)** для подготовки пользователей и групп в Tuist.

Сначала настройте <.localized_link href="/guides/integrations/authentication/sso#okta">SSO Okta</.localized_link>, если пользователи должны входить через Okta, а затем настройте подготовку через SCIM, следуя инструкциям ниже.

### Шаг 1. Создайте токен Tuist SCIM {#okta-step-1}

1. В Tuist перейдите на вкладку настроек **Аутентификация** вашей организации.
2. В разделе **Подготовка через SCIM** скопируйте **URL-адрес конечной точки SCIM**. Он должен заканчиваться на `/scim/v2`.
3. Нажмите **Создать токен**.
4. Назовите токен (например, `Okta`).
5. Скопируйте созданный токен. Tuist показывает токен только один раз.

### Шаг 2. Добавьте приложение Okta SCIM {#okta-step-2}

1. В панели администратора Okta перейдите в **Applications > Applications > Browse App Catalog**.
2. Найдите и добавьте **SCIM 2.0 Test App (Header Auth)**.
3. Дайте ему узнаваемое имя, например `Tuist SCIM`.
4. Завершите настройку параметров входа для тестового приложения SCIM. Tuist не использует это приложение для входа; вход обрабатывается приложением OIDC из руководства по SSO.

### Шаг 3. Настройте интеграцию API {#okta-step-3}

1. Откройте вкладку **Provisioning** приложения SCIM.
2. В разделе **Settings > Integration** нажмите **Configure API Integration** или **Edit**.
3. Установите флажок **Enable API integration**.
4. Вставьте **URL-адрес конечной точки SCIM** Tuist в поле Okta **Base URL**.
5. Вставьте токен Tuist SCIM в поле **API Token** с префиксом `Bearer `. Например, `Bearer tuist_scim_...`. Okta отправляет это поле в заголовке `Authorization`, а Tuist ожидает токен bearer.
6. Включите **Import Groups**, если хотите, чтобы Okta читал группы SCIM Tuist.
7. Нажмите **Test API Credentials**. Okta должна сообщить, что интеграция успешно проверена.
8. Нажмите **Save**.

### Шаг 4. Включите действия подготовки {#okta-step-4}

1. На вкладке **Provisioning** приложения SCIM откройте **Settings > To App**.
2. Нажмите **Edit**.
3. Включите:
   - **Create Users**
   - **Update User Attributes**
   - **Deactivate Users**
4. Нажмите **Save**.

### Шаг 5. Назначьте пользователей или группы {#okta-step-5}

1. Откройте вкладку **Assignments** приложения SCIM.
2. Назначьте пользователей или группы, которые должны быть подготовлены в Tuist.
3. Назначьте тех же пользователей или группы приложению Okta OIDC, если они также должны иметь возможность входа через SSO.
4. Проверьте вкладку **Members** в Tuist, чтобы убедиться, что назначенные пользователи появились в организации.

Чтобы проверить отмену подготовки, отмените назначение или деактивируйте пользователя в Okta и убедитесь, что он исчез с вкладки **Members** организации Tuist.

### Назначение ролей {#okta-assigning-roles}

В Tuist есть три <.localized_link href="/guides/server/accounts-and-projects#roles">роли</.localized_link>: `admin`, `user` и `viewer`. Tuist предоставляет одну группу SCIM для каждой роли: `Tuist Admins`, `Tuist Users` и `Tuist Viewers`. Свяжите группы Okta с ними через **Group Push**:

1. Выберите или создайте группу Okta для каждой роли, которую вы хотите назначить, и назначьте эти группы на вкладке **Assignments** приложения SCIM.
2. Убедитесь, что **Import Groups** включено в интеграции API, затем откройте вкладку **Import** приложения SCIM и нажмите **Import Now**, чтобы Okta узнала о группах Tuist.
3. Откройте вкладку **Push Groups** приложения SCIM и нажмите **Push Groups > Find groups by name**.
4. Выберите группу Okta, выберите **Link Group** в качестве действия push и выберите соответствующую группу Tuist. Tuist не поддерживает создание групп через SCIM, поэтому свяжите существующую группу вместо создания новой.
5. Нажмите **Save** и повторите для остальных ролей.

Добавление пользователя в связанную группу назначает ему эту роль. Удаление пользователя из группы возвращает его к роли, по умолчанию назначаемой участникам единого входа в организации, которой является `user`, если администратор не изменил её в разделе **Settings > Authentication**. Пользователи, не входящие ни в одну связанную группу, также получают эту роль. Удаление пользователя из группы не удаляет его из организации; для этого отмените назначение или деактивируйте его в Okta.

## Microsoft Entra ID {#microsoft-entra-id}

Entra ID выполняет подготовку Tuist через корпоративное приложение, отсутствующее в галерее. Сначала настройте <.localized_link href="/guides/integrations/authentication/sso#microsoft-entra-id">SSO Microsoft Entra ID</.localized_link>, если пользователи также должны входить через Entra ID.

Приложение, которое вы регистрируете для единого входа, и корпоративное приложение, используемое для подготовки, могут быть одним и тем же. Подготовка настраивается в записи корпоративного приложения.

### Шаг 1. Создайте токен Tuist SCIM {#entra-step-1}

1. В Tuist перейдите на вкладку настроек **Authentication** вашей организации.
2. В разделе **SCIM provisioning** скопируйте **URL-адрес конечной точки SCIM**. Он должен заканчиваться на `/scim/v2`.
3. Нажмите **Создать токен**.
4. Назовите токен (например, `Entra ID`).
5. Скопируйте созданный токен. Tuist показывает токен только один раз.

### Шаг 2. Настройте подготовку {#entra-step-2}

1. В центре администрирования Microsoft Entra перейдите в **Identity > Applications > Enterprise applications** и откройте приложение Tuist.
2. Откройте **Provisioning** и установите **Provisioning Mode** в значение **Automatic**.
3. Установите **Tenant URL** равным URL-адресу конечной точки SCIM Tuist.
4. Установите **Secret Token** равным токену Tuist SCIM. Введите токен отдельно, без префикса `Bearer `; Entra ID добавляет схему самостоятельно.
5. Нажмите **Test Connection**. Entra ID должна сообщить, что предоставленные учетные данные авторизованы.
6. Сохраните конфигурацию.

### Шаг 3. Установите атрибут сопоставления {#entra-step-3}

1. В разделе **Mappings** откройте **Provision Microsoft Entra ID Users**.
2. Убедитесь, что `userPrincipalName` или `mail` сопоставляется с атрибутом SCIM `userName` и что этот атрибут используется для **Matching precedence 1**.
3. Удалите `externalId` из атрибутов сопоставления, если он присутствует.

Tuist сопоставляет подготовленных пользователей по `userName`. Он не хранит идентификатор объекта каталога, который Entra ID отправляет как `externalId`, поэтому фильтр по этому атрибуту не находит существующего участника, и циклы подготовки могут работать непредсказуемо.

### Шаг 4. Отключите подготовку групп {#entra-step-4}

В разделе **Mappings** отключите **Provision Microsoft Entra ID Groups**.

Группы SCIM в Tuist — это фиксированные группы для каждой роли организации, а не группы каталога, которые можно создавать, поэтому попытка подготовить группу каталога завершается ошибкой. Вместо этого назначайте роли, как описано ниже.

### Шаг 5. Назначьте пользователей и запустите подготовку {#entra-step-5}

1. Откройте вкладку **Users and groups** приложения и назначьте пользователей или группы, которые должны быть подготовлены в Tuist.
2. Вернитесь в **Provisioning** и запустите её.
3. Проверьте вкладку **Members** в Tuist, чтобы убедиться, что назначенные пользователи появились в организации.

Entra ID выполняет подготовку по собственному расписанию, обычно каждые 40 минут, поэтому участники не появляются мгновенно. Используйте **Provision on demand**, чтобы немедленно протестировать одного пользователя.

Чтобы проверить отмену подготовки, отмените назначение или отключите пользователя в Entra ID и убедитесь, что он исчез с вкладки **Members** организации Tuist.

Если вы позже измените область подготовки, например с **Sync all users and groups** на **Sync only assigned users and groups**, нажмите **Restart provisioning**. Entra ID применит новую область, включая отмену подготовки пользователей, которые больше в неё не входят, только после перезапуска.

### Назначение ролей {#entra-assigning-administrators}

В Tuist есть три <.localized_link href="/guides/server/accounts-and-projects#roles">роли</.localized_link>: `admin`, `user` и `viewer`. Чтобы настроить их из Entra ID:

1. В разделе **App registrations** откройте приложение Tuist и добавьте роль приложения для каждой роли Tuist, которую хотите назначить. Установите **Allowed member types** в **Users/Groups**, а **Value** — в `admin`, `user` или `viewer`.
2. На вкладке **Users and groups** корпоративного приложения назначьте каждому пользователю или группе одну из этих ролей приложения. Пользователь может иметь несколько ролей приложения. Tuist применяет наиболее привилегированную роль, где `admin` имеет приоритет над `user`, а `user` — над `viewer`, поэтому пользователь, состоящий в группах, сопоставленных с разными ролями, получает самую высокую из них.
3. В разделе **Provisioning > Mappings** откройте выпадающий список **Advanced Options** и выберите **Edit target User attributes**. Добавьте атрибут с именем `roles`, установите **Type** в `String` и отметьте **Multi-Value**.
4. В разделе **Provisioning > Mappings > Provision Microsoft Entra ID Users** нажмите **Add New Mapping**. Установите **Mapping type** в **Expression**, **Expression** в `AssertiveAppRoleAssignmentsComplex([appRoleAssignments])`, а **Target attribute** — в добавленный вами атрибут `roles`.
5. Оставьте область подготовки установленной в **Sync only assigned users and groups**. `AssertiveAppRoleAssignmentsComplex` несовместим с **Sync all users and groups**.

`AssertiveAppRoleAssignmentsComplex` отправляет все роли приложения, которые есть у пользователя, а также отправляет удаления, поэтому удаление роли в Entra ID понижает пользователя до самой привилегированной роли, которая у него остаётся. `SingleAppRoleAssignment([appRoleAssignments])`, сопоставленный с `roles[primary eq "True"].value`, также работает, но он отправляет только одну роль, и Entra ID не гарантирует, какую именно выберет, если у пользователя их несколько.

Изменение ролей приложения пользователя в Entra ID обновляет его роль в Tuist при следующем цикле подготовки. Пользователь, подготовленный без роли приложения или со значениями, отличными от `admin`, `user` или `viewer`, получает роль, под которой организация регистрирует участников единого входа, то есть `user`, если администратор не изменил её в разделе **Settings > Authentication**.

## Поведение жизненного цикла {#lifecycle-behavior}

Когда ваш поставщик удостоверений назначает пользователя приложению подготовки, Tuist создаёт пользователя, если этот адрес электронной почты ещё не известен Tuist, а затем добавляет его в организацию. Если адрес электронной почты уже принадлежит существующему пользователю Tuist вне организации, Tuist отклоняет запрос, чтобы предотвратить захват поставщиком удостоверений пользователя, которым он ещё не управляет в этой организации.

Когда ваш поставщик удостоверений отменяет назначение или деактивирует пользователя, Tuist удаляет его роль в организации, сохраняя запись пользователя и любые принадлежащие ему работы. Отмена подготовки не отключает пользователя глобально, так как один и тот же пользователь Tuist может принадлежать другим организациям.

Tuist предоставляет три синтетические группы SCIM: `Tuist Admins`, `Tuist Users` и `Tuist Viewers`. Добавление участника в группу устанавливает его роль в организации. Удаление участника из группы, соответствующей его текущей роли, возвращает его к роли регистрации, а само членство заканчивается только тогда, когда пользователь теряет назначение или деактивируется. Поставщики удостоверений также могут устанавливать роль через атрибут SCIM `roles` у пользователя со значением `admin`, `user` или `viewer`. Поставщик удостоверений, отправляющий несколько значений, применяет наиболее привилегированное из них, где `admin` имеет приоритет над `user`, а `user` — над `viewer`.

## Поддерживаемые возможности SCIM {#supported-scim-features}

Tuist поддерживает конечные точки SCIM 2.0, необходимые поставщикам удостоверений для управления жизненным циклом:

- `POST`, `GET`, `PUT`, `PATCH` и `DELETE` для `/Users`.
- `GET` и `PATCH` для `/Groups`.
- Конечные точки обнаружения SCIM для `/ServiceProviderConfig`, `/ResourceTypes` и `/Schemas`.
