Перейти к основному содержимому
Версия: 2.0 (WIP)

Единая учетная запись пользователя

В системе реализован механизм единой учётной записи, позволяющий связать несколько способов аутентификации с одним пользователем. Вместо создания отдельных аккаунтов для локального входа, LDAP и OIDC, администратор настраивает правила сопоставления, а система автоматически предлагает объединить учётные записи при совпадении логина.

Назначение

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

Без механизма единой УЗ администратору пришлось бы создавать отдельного пользователя для каждого способа входа и дублировать настройки прав доступа. С единой УЗ пользователь, созданный локально, может позднее войти через LDAP или OIDC — система обнаружит совпадение и предложит связать аккаунты.

к сведению

Единая учётная запись позволяет пользователю входить в систему любым настроенным способом (локальный пароль, LDAP, OIDC), сохраняя единый набор прав доступа и атрибутов.

Что объединяется

К одному пользователю могут быть привязаны следующие источники аутентификации:

  • Локальная учётная запись — аутентификация по логину и паролю, хранящимся в системе.
  • LDAP-аккаунты — один или несколько LDAP-серверов. Одновременно может быть настроено несколько подключений к LDAP.
  • OIDC-аккаунты — один или несколько провайдеров OpenID Connect. Одновременно может быть настроено несколько OIDC-провайдеров.
Источник аутентификацииМножественностьКлюч сопоставления
Локальная учётная запись1login
LDAP-сервер1..NРезультат login_expression
OIDC-провайдер1..NРезультат login_expression
примечание

К одному пользователю может быть привязано произвольное количество LDAP-серверов и OIDC-провайдеров одновременно.

Механизм сопоставления учётных записей

Ключ сопоставления — логин

Признаком совпадения учётных записей при аутентификации является совпадение логина. При входе через LDAP или OIDC значение логина вычисляется из ответа провайдера с помощью JQ-выражения login_expression. Это выражение настраивается индивидуально для каждого LDAP-сервера и OIDC-провайдера.

Если вычисленный логин совпадает с полем login существующего пользователя в системе, возникает возможность объединения учётных записей.

Выражение login_expression для LDAP

Выражение login_expression — это JQ-выражение, которое применяется к атрибутам LDAP-записи аутентифицированного пользователя. Результатом должно быть строковое значение, используемое в качестве логина.

Настраивается в: Настройки → Пользователи → LDAP → [сервер] → секция «Маппинг атрибутов»

Примеры выражений:

LDAP-каталогАтрибутВыражение login_expression
Microsoft Active DirectorysAMAccountName.sAMAccountName
OpenLDAPuid.uid
Произвольныйmail (до @).mail | split("@")[0]

Выражение login_expression для OIDC

Выражение login_expression — это JQ-выражение, которое применяется к ответу userinfo от OIDC-провайдера. Результатом должно быть строковое значение, используемое в качестве логина.

Настраивается в: Настройки → OIDC → [провайдер] → секция «Маппинг атрибутов»

Примеры выражений:

OIDC-провайдерПоле userinfoВыражение login_expression
Keycloakpreferred_username.preferred_username
Универсальныйemail.email
Универсальныйsub.sub

Настройка login_expression

 

Выражение login_expression (JQ-выражение для логина) должно возвращать строку, совпадающую с полем login существующего пользователя. Если выражение настроено некорректно, система не сможет сопоставить учётные записи.


Процесс объединения учётных записей

Последовательность шагов:

  1. Пользователь выбирает вход через LDAP-сервер или OIDC-провайдер на странице входа.
  2. Система аутентифицирует пользователя через выбранный провайдер.
  3. Из ответа провайдера извлекается логин с помощью выражения login_expression.
  4. Система проверяет, существует ли пользователь с таким логином.
  5. Если пользователь не найден — создаётся новый аккаунт. Если найден — происходит перенаправление на форму объединения.
  6. Пользователь подтверждает владение существующей учётной записью одним из доступных способов.
  7. Учётные записи связываются, пользователь входит в систему.

Форма подтверждения объединения

При обнаружении совпадения логина пользователь перенаправляется на форму подтверждения объединения. Форма отображает предупреждение и доступные способы подтверждения.

Пользователь уже существует

Пользователь с логином "example_user" уже есть в системе. Для объединения учётных записей подтвердите пароль от существующего аккаунта.

Доступные способы подтверждения определяются автоматически на основании методов аутентификации, уже связанных с существующей учётной записью.

Способ 1: Подтверждение паролем локальной учётной записи

Доступен, если у существующего пользователя установлен локальный пароль. Поле логина предзаполнено и заблокировано для редактирования. Пользователь вводит пароль от существующей учётной записи. При успешной проверке внешний аккаунт (LDAP/OIDC) привязывается к существующему пользователю.

Способ 2: Подтверждение через LDAP

Доступен, если к существующей учётной записи уже привязаны LDAP-серверы. Форма отображает выпадающий список доменов LDAP. Пользователь выбирает домен, вводит логин и пароль. При успешной аутентификации через выбранный LDAP-сервер новый внешний аккаунт привязывается к существующему пользователю.

Способ 3: Подтверждение через OIDC

Доступен, если к существующей учётной записи уже привязаны OIDC-провайдеры. Форма отображает кнопки для каждого привязанного провайдера. При нажатии на кнопку выполняется OAuth-авторизация через выбранный провайдер. После успешной аутентификации новый внешний аккаунт привязывается к существующему пользователю.

 

Если у пользователя настроено несколько способов аутентификации (например, локальный пароль и LDAP), форма покажет все доступные варианты подтверждения. Пользователь может выбрать любой из них.