Конфигурация OIDC-провайдера в DataLens On-premises
Чтобы настроить OIDC-провайдер (OpenID Connect), создайте конфигурацию с необходимыми параметрами для подключения к OIDC-серверу и маппинга пользовательских атрибутов.
Процесс аутентификации
- Пользователь выбирает OIDC-провайдер на странице входа.
- Система перенаправляет пользователя на страницу аутентификации OIDC-провайдера.
- После успешной аутентификации OIDC-провайдер перенаправляет пользователя обратно в систему с кодом авторизации. В endpoint
{UI_APP_ENDPOINT}/auth/callback/oidc. - Система обменивает код авторизации на токены доступа и ID-токен.
- Система запрашивает дополнительную информацию через userinfo endpoint.
- Система создает или обновляет пользователя в базе данных, назначает роли и группы на основе информации из userinfo.
- Система создает сессию для пользователя и перенаправляет его на главную страницу.
Основные параметры конфигурации
{
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 присутствуют роли или группы, указанные в конфигурации, они будут назначены пользователю. Если роли не найдены, пользователю будет назначена роль по умолчанию.