---
metadata:
  - name: generator
    content: Diplodoc Platform v5.63.0
alternate:
  - ru/concepts/auth-providers/sync-IdP
  - href: ru/concepts/auth-providers/sync-IdP.md
    type: text/markdown
    title: Markdown version
csp:
  - script-src:
      - https://mc.yandex.ru
    img-src:
      - https://mc.yandex.ru
    connect-src:
      - https://mc.yandex.ru
      - wss://mc.yandex.ru
    child-src:
      - 'blob:'
      - https://mc.yandex.ru
    frame-src:
      - 'blob:'
      - https://mc.yandex.ru
    frame-ancestors:
      - 'blob:'
      - https://mc.yandex.ru
canonical: ru/concepts/auth-providers/sync-IdP.html
title: Синхронизация с внешним IdP
description: >-
  Следуя данной инструкции, вы сможете запустить скрипт синхронизации с внешним
  IdP.
vcsPath: ru/concepts/auth-providers/sync-IdP.md
---

# Синхронизация DataLens On-premises с внешним IdP

Скрипт выполняет синхронизацию с внешним поставщиком идентификационных данных (IdP). Текущая версия скрипта:

* Создает новых пользователей IdP.
* Создает новые группы IdP.
* Обновляет членство пользователей в группах IdP.
* Обновляет заголовки групп.
* Обновляет роли пользователей.
* Обновляет данные профиля пользователей.


## Требования для запуска {#requirements}

* Для запуска скрипта синхронизации необходима Node.js версии 20 и выше. Если Node.js не установлена или нужна более новая версия, выберите подходящий вариант установки на [сайте Node.js](https://nodejs.org/en/download/package-manager).
* Настройте конфигурацию для сервиса Auth, используя переменную окружения `AUTH_PROVIDERS_CONFIG`.
* Отключите `syncUserGroups` в `AUTH_PROVIDERS_CONFIG` для вашего IdP, если вы настроили периодическую синхронизацию с помощью данного скрипта.


## Пример запуска скрипта {#example}

```bash
node ./idp-sync.js \
     usEndpoint=https://us.domain.org \
     authEndpoint=https://auth.domain.org \
     usMasterToken=usmastertoken \
     authMasterToken=authmastertoken \
     idpSlug=someidpslug \
     idpData=./idp-data.json
```

Где:

* `idpSlug` — slug из конфигурации IdP в сервисе Auth;
* `usEndpoint` — эндпоинт до сервиса United Storage;
* `authEndpoint` — эндпоинт до сервиса Auth;
* `usMasterToken` — `US_MASTER_TOKEN` мастер токен для сервиса United Storage;
* `authMasterToken` — `AUTH_MASTER_TOKEN` мастер токен для сервиса Auth;
* `idpData` — путь до данных из IdP в формате json.


## IdP data из источника {#idp-data-source}

Подготовьте данные из IdP в формате json согласно `AUTH_PROVIDERS_CONFIG` для auth сервиса:

```typescript
type JsonData = {
    users: {
        idpUserId: string, // внутренний id пользователя из IdP
        login: string,
        email : string | null,
        firstName: string | null,
        lastName: string | null,
        roles: string[], // datalens.admin, datalens.creator, datalens.visitor
    }[];
    groups: {
        groupId: string, // внутренний id группы из IdP
        title: string,
        memberIds: string[], // внутренние id пользователей из IdP - idpUserId
    }[];
}
```


### Пример idp-data.json для OpenLDAP {#example-ldap}

```json
{
    "users": [
        {
            "idpUserId": "id-bob",
            "login": "bob",
            "email" : "bob@example.org",
            "firstName": "Bob",
            "lastName": "Smith",
            "roles": ["datalens.visitor"]
        },
        {
            "idpUserId": "id-carl",
            "login": "carl",
            "email" : "carl@example.com",
            "firstName": "Carl",
            "lastName": "Snow",
            "roles": ["datalens.creator"]
        }
        ...
    ],
    "groups": [
        {
            "groupId": "id-datalensadmins",
            "title": "DataLens admins",
            "memberIds": ["id-bob", "id-carl"]
        },
        ...
    ]
}
```