Конфигурация OIDC-провайдера в DataLens On-premises

Чтобы настроить OIDC-провайдер (OpenID Connect), создайте конфигурацию с необходимыми параметрами для подключения к OIDC-серверу и маппинга пользовательских атрибутов.

Процесс аутентификации

  1. Пользователь выбирает OIDC-провайдер на странице входа.
  2. Система перенаправляет пользователя на страницу аутентификации OIDC-провайдера.
  3. После успешной аутентификации OIDC-провайдер перенаправляет пользователя обратно в систему с кодом авторизации. В endpoint {UI_APP_ENDPOINT}/auth/callback/oidc.
  4. Система обменивает код авторизации на токены доступа и ID-токен.
  5. Система запрашивает дополнительную информацию через userinfo endpoint.
  6. Система создает или обновляет пользователя в базе данных, назначает роли и группы на основе информации из userinfo.
  7. Система создает сессию для пользователя и перенаправляет его на главную страницу.

Основные параметры конфигурации

{
    slug: 'keycloak',                  // Уникальный идентификатор провайдера
    title: 'Keycloak',                 // Отображаемое название провайдера
    type: 'oidc',                      // Тип провайдера (должен быть 'oidc')
    defaultRole: 'datalens.visitor',   // Роль по умолчанию для новых пользователей
    config: {
        // Параметры подключения к OIDC-серверу
        issuer: 'https://keycloak.example.org/realms/datalens-enterprise/.well-known/openid-configuration',  // URL OIDC-сервера
        clientId: 'datalens',          // Идентификатор клиента
        clientSecret: 'password',      // Секрет клиента
        codeChallengeMethod: 'S256',   // Метод PKCE (Proof Key for Code Exchange)
        scope: ['openid', 'profile', 'email', 'roles', 'groups'],  // Запрашиваемые области доступа
        
        // Маппинг атрибутов пользователя (опционально)
        userAttributes: {
            userId: 'sub',             // Атрибут для идентификатора пользователя (по умолчанию 'sub')
            login: 'preferred_username', // Атрибут для логина пользователя (по умолчанию 'preferred_username')
            email: 'email',            // Атрибут для адреса электронной почты пользователя (по умолчанию 'email')
            firstName: 'given_name',   // Атрибут для имени пользователя (по умолчанию 'given_name')
            lastName: 'family_name',   // Атрибут для фамилии пользователя (по умолчанию 'family_name')
        },
        
        // Настройка ролей (опционально)
        roles: {
            path: 'resource_access.datalens.roles',  // Путь к ролям в userinfo
            targetType: 'array-of-strings',          // Тип данных ролей
            mapping: {
                'datalens.admin': 'client.datalens.admin',     // Маппинг ролей
                'datalens.creator': 'client.datalens.creator', // Маппинг ролей
                'datalens.visitor': 'client.datalens.visitor', // Маппинг ролей
            },
        },
        syncUserRoles: true,           // Синхронизировать роли пользователя при каждом входе
        
        // Настройка групп (опционально)
        groups: {
            path: 'groups',            // Путь к группам в userinfo
            targetType: 'array-of-objects',  // Тип данных групп
            mapping: {                 // Маппинг атрибутов группы (только для 'array-of-objects')
                groupId: 'id',         // Атрибут для идентификатора группы
                title: 'name',         // Атрибут для названия группы
            },
        },
        syncUserGroups: true,          // Синхронизировать группы пользователя при каждом входе
    }
}

Описание параметров

Основные параметры

  • slug — уникальный идентификатор провайдера, используется в URL и внутренних идентификаторах.
  • title — название провайдера, отображаемое в интерфейсе.
  • type — тип провайдера, для OIDC должно быть значение oidc.
  • defaultRole — роль, назначаемая пользователю, если не удалось определить роль из userinfo.

Параметры подключения к OIDC-серверу

  • issuer — URL OIDC-сервера, который предоставляет метаданные OpenID Connect. Обычно это URL с путем к .well-known/openid-configuration.
  • clientId — Идентификатор клиента, полученный при регистрации приложения в OIDC-провайдере.
  • clientSecret — Секрет клиента, полученный при регистрации приложения в OIDC-провайдере.
  • codeChallengeMethod — Метод PKCE (Proof Key for Code Exchange) для защиты от атак перехвата кода авторизации. По умолчанию S256. Если передать null, то авторизация будет выполняться с state и nonce без PKCE.
  • scope — Массив запрашиваемых областей доступа. По умолчанию: ['openid', 'profile', 'email'].

Маппинг атрибутов пользователя

Позволяет настроить соответствие между атрибутами пользователя OIDC и полями пользователя в системе:

  • userId — атрибут для идентификатора пользователя (по умолчанию sub).
  • login — атрибут для логина пользователя (по умолчанию preferred_username).
  • email — атрибут для адреса электронной почты пользователя (по умолчанию email).
  • firstName — атрибут для имени пользователя (по умолчанию given_name).
  • lastName — атрибут для фамилии пользователя (по умолчанию family_name).

Настройка ролей

Позволяет настроить получение и маппинг ролей пользователя из userinfo:

  • path — путь к ролям в userinfo. Например, resource_access.datalens.roles или realm_access.roles.

  • targetType — тип данных ролей. Возможные значения:

    • array-of-strings — массив строк.
    • stringified-array-of-strings — строка, содержащая сериализованный JSON-массив строк.
  • mapping — объект, сопоставляющий роли в системе с ролями в userinfo.

Настройка групп

Позволяет настроить получение и маппинг групп пользователя из userinfo:

  • path — путь к группам в userinfo. Например, groups.

  • targetType — тип данных групп. Возможные значения:

    • array-of-strings — массив строк, где каждая строка — идентификатор группы.
    • array-of-strings-with-id — массив строк, где каждая строка имеет формат id:title.
    • array-of-objects — массив объектов, содержащих идентификатор и название группы.
    • stringified-array-of-strings — строка, содержащая сериализованный JSON-массив строк.
    • stringified-array-of-strings-with-id — строка, содержащая сериализованный JSON-массив строк с форматом id:title.
    • stringified-array-of-objects — строка, содержащая сериализованный JSON-массив объектов.
  • mapping — объект, определяющий, какие поля объекта группы использовать для идентификатора и названия группы. Обязателен для типов array-of-objects и stringified-array-of-objects.

    • groupId — поле объекта группы, используемое как идентификатор.
    • title — поле объекта группы, используемое как название.

Дополнительные настройки

  • syncUserRoles — при значении true (по умолчанию) роли пользователя будут синхронизироваться при каждом входе.
  • syncUserGroups — при значении true (по умолчанию false) группы пользователя будут синхронизироваться при каждом входе.

Особенности синхронизации ролей и групп

Синхронизация групп и ролей пользователя происходит в момент входа пользователя в систему. Если в userinfo присутствуют роли или группы, указанные в конфигурации, они будут назначены пользователю. Если роли не найдены, пользователю будет назначена роль по умолчанию.