Синхронизация с внешним 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"]
                },
                ...
            ]
        }