7.6. Аутентификация пользователя через OpenID Connect #
В этом разделе объясняется, как интегрировать PPEM с провайдерами OpenID Connect (OIDC), а также описан процесс аутентификации пользователей.
Важно
В этом разделе в качестве примера OIDC-провайдера используется Keycloak. На основании требований вашей организации вы можете выбрать любого другого провайдера.
Процесс интеграции состоит из следующих этапов:
За подробной информацией о процессе интеграции обратитесь к Подразделу 7.6.4.
7.6.1. Создание клиента PPEM в Keycloak #
Создайте клиент PPEM в веб-приложении Keycloak.
При этом выполните следующие действия:
Укажите URI, необходимые для интеграции с PPEM:
URI перенаправления в формате
https://хост_PPEM/auth/oidc/callback;URI перенаправления после выхода в формате
https://хост_PPEM/.
Сгенерируйте секрет для клиента PPEM.
За более подробной информацией обратитесь к документации Keycloak по созданию клиентских приложений.
7.6.2. Настройка менеджера для интеграции с Keycloak #
В файле конфигурации менеджера
ppem-manager.ymlукажите следующие параметры для интеграции с Keycloak:oidc: issuer:keycloak_API_URLclient_id:идентификатор_клиента_ppemclient_secret:секрет_клиента_ppemlogin_timeout:тайм-аут_аутентификацииscopes: -области_данныхГде:
issuer: URL API Keycloak.client_id: идентификатор клиента, указанного при создании клиента PPEM в Keycloak.client_secret: секрет, сгенерированный при создании клиента PPEM в Keycloak.login_timeout: тайм-аут аутентификации пользователя. В случае истечения тайм-аута требуется повторная аутентификация.Значение по умолчанию:
10m.Необязательный параметр.
scopes: список областей данных, которые будут поступать в PPEM из Keycloak.Возможные значения:
openid: запрос токена доступа.Эта область данных является обязательной. Без неё при аутентификации пользователей Keycloak будет возвращать ошибку.
profile: запрос данных пользователя Keycloak, например имя и фамилия пользователя.email: запрос электронного адреса пользователя Keycloak.Эта область данных является обязательной. Без неё в PPEM нельзя будет создать пользователей Keycloak.
За подробной информацией обратитесь к Подразделу 7.6.4.
phone: запрос номера телефона пользователя Keycloak.Эта область данных является необязательной.
roles: запрос групп Keycloak.Эта область данных является обязательной. Без неё пользователи Keycloak не смогут выполнять никакие действия в веб-приложении.
За подробной информацией обратитесь к Подразделу 7.6.4.
offline_access: запрос на обновление токена.Эта область данных является обязательной. Без неё после истечения срока действия токенов доступа для пользователей Keycloak потребуется повторная аутентификация.
Значение по умолчанию:
- openid - profile - email
Пример настройки интеграции с Keycloak:
oidc: issuer: http://198.51.100.0:8080/realms/j.doe client_id: j.doe-ppem-client client_secret: yyyyyYyyyYyYY1yy1yyyYyy1YYYYYy1y login_timeout: 10m scopes: - openid - profile - email - phone - roles - offline_access
7.6.3. Синхронизация групп Keycloak и PPEM #
Все пользователи Keycloak должны быть добавлены в группы, а затем необходимо синхронизировать группы Keycloak и PPEM. В этом случае пользователи Keycloak автоматически добавляются в группы PPEM, и им назначаются роли через эти группы. В противном случае пользователи Keycloak не смогут выполнять никакие действия в веб-приложении.
Чтобы синхронизировать группы Keycloak и PPEM при создании или редактировании групп PPEM:
Из выпадающего списка Группа выберите OIDC.
В поле OIDC-группа укажите имя группы Keycloak.
7.6.4. Важные аспекты #
Синхронизация пользователей.
Список всех пользователей PPEM хранится в таблице
public.usersбазы данных репозитория, и пользователи Keycloak автоматически создаются в этой таблице.Поскольку при создании пользователя необходимо указать электронный адрес, эту область данных необходимо также указать при настройке менеджера для интеграции с Keycloak.
При каждом обновлении токена доступа информация о пользователях Keycloak обновляется в таблице
public.usersна основании полейissиsub, гдеiss— это URL Keycloak, аsub— идентификатор пользователя Keycloak.Синхронизация групп.
В PPEM список групп пользователей хранится в таблице
public.groupsбазы данных репозитория.Синхронизация групп Keycloak и PPEM выполняется с помощью полей токена доступа
groupsиissи полейsourceиexternal_idтаблицыpublic.groups. Чтобы в токене доступа было полеgroups, при настройке менеджера для интеграции с Keycloak необходимо указать область данныхroles.Когда группы синхронизированы, пользователи Keycloak автоматически добавляются в группы PPEM и роли назначаются им через эти группы.
За подробной информацией обратитесь к Подразделу 7.6.3.
Чтобы пользователь Keycloak не смог зайти в веб-приложение, его можно заблокировать.
Для этого при редактировании пользователя выберите Доступ в PPEM Заблокирован.
7.6.5. Процесс аутентификации пользователей #
Процесс аутентификации пользователя основан на стандартном потоке кода авторизации для провайдеров OIDC, используемых в большинстве приложений. Процесс включает следующие этапы:
Первичная аутентификация:
Пользователь Keycloak указывает сетевой адрес сервера, в котором установлен менеджер (далее — сервер PPEM), в адресной строке браузера, например
https://ppem.example.com.Сервер PPEM определяет, что у пользователя Keycloak не хватает cookie с токенами доступа и обновления и перенаправляет этого пользователя в веб-приложение Keycloak.
Пользователь Keycloak вводит учётные данные.
Если учётные данные пользователя действительны, Keycloak отправляет запрос, содержащий одноразовый код, серверу PPEM.
Сервер PPEM обменивает одноразовый код на токены доступа и обновления и создаёт cookie с этими токенами для пользователя Keycloak.
Теперь у пользователя Keycloak есть доступ к PPEM.
Автоматическое обновление токена:
При выполнении каждого действия в веб-приложении сервер PPEM проверяет наличие у пользователя Keycloak cookie с токенами доступа и обновления.
При необходимости сервер PPEM обменивает существующий токен обновления на новые токены доступа и обновления и создаёт cookie с этими токенами для пользователя Keycloak.
Выполняется действие.
Выход:
Пользователь Keycloak выходит из веб-приложения PPEM.
Пользователь Keycloak перенаправляется в веб-приложение Keycloak, в котором прерывается пользовательский сеанс, и токены доступа и обновления удаляются.
Пользователь Keycloak перенаправляется в веб-приложение PPEM. Из-за отсутствия токенов доступа и обновления пользователь перенаправляется в веб-приложение Keycloak, и ему предлагается ввести учётные данные.