Синхронизация с внешним IdP

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

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

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

  • Для запуска скрипта синхронизации необходима Node.js версии 20 и выше. Если Node.js не установлена или нужна более новая версия, выберите подходящий вариант установки на сайте Node.js.
  • Настройте конфигурацию для сервиса Auth, используя переменную окружения AUTH_PROVIDERS_CONFIG.
  • Отключите syncUserGroups в AUTH_PROVIDERS_CONFIG для вашего IdP, если вы настроили периодическую синхронизацию с помощью данного скрипта.

Пример запуска скрипта

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;
  • usMasterTokenUS_MASTER_TOKEN мастер токен для сервиса United Storage;
  • authMasterTokenAUTH_MASTER_TOKEN мастер токен для сервиса Auth;
  • idpData — путь до данных из IdP в формате json.

IdP data из источника

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

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

{
    "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"]
        },
        ...
    ]
}