---
metadata:
  - name: generator
    content: Diplodoc Platform v5.63.0
alternate:
  - ru/concepts/auth-providers/oidc-config
  - href: ru/concepts/auth-providers/oidc-config.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/oidc-config.html
title: Как настроить OIDC-провайдер аутентификации в DataLens On-premises
description: >-
  Следуя данной инструкции, вы сможете настроить OIDC-провайдер аутентификации в
  DataLens On-premises.
vcsPath: ru/concepts/auth-providers/oidc-config.md
---

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

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


## Процесс аутентификации {#auth-process}

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


## Основные параметры конфигурации {#base-config-parameters}

```javascript
{
    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,          // Синхронизировать группы пользователя при каждом входе
    }
}
```


## Описание параметров {#oidc-parameters}

### Основные параметры {#base-parameters}

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


### Параметры подключения к OIDC-серверу {#oidc-connection-parameters}

* **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']`.


### Маппинг атрибутов пользователя {#user-attributes-mapping}

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

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


### Настройка ролей {#roles-settings}

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

* **path** — путь к ролям в userinfo. Например, `resource_access.datalens.roles` или `realm_access.roles`.
* **targetType** — тип данных ролей. Возможные значения:

  * `array-of-strings` — массив строк.
  * `stringified-array-of-strings` — строка, содержащая сериализованный JSON-массив строк.

* **mapping** — объект, сопоставляющий роли в системе с ролями в userinfo.


### Настройка групп {#groups-settings}

Позволяет настроить получение и маппинг групп пользователя из 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** — поле объекта группы, используемое как название.


### Дополнительные настройки {#additional-settings}

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


### Особенности синхронизации ролей и групп {#roles-groups-synchronization}

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