7.6. Аутентификация пользователя через OpenID Connect #

В этом разделе объясняется, как интегрировать PPEM с провайдерами OpenID Connect (OIDC), а также описан процесс аутентификации пользователей.

Важно

В этом разделе в качестве примера OIDC-провайдера используется Keycloak. На основании требований вашей организации вы можете выбрать любого другого провайдера.

Процесс интеграции состоит из следующих этапов:

За подробной информацией о процессе интеграции обратитесь к Подразделу 7.6.4.

7.6.1. Создание клиента PPEM в Keycloak #

Создайте клиент PPEM в веб-приложении Keycloak.

При этом выполните следующие действия:

  1. Укажите URI, необходимые для интеграции с PPEM:

    • URI перенаправления в формате https://хост_PPEM/auth/oidc/callback;

    • URI перенаправления после выхода в формате https://хост_PPEM/.

  2. Сгенерируйте секрет для клиента PPEM.

За более подробной информацией обратитесь к документации Keycloak по созданию клиентских приложений.

7.6.2. Настройка менеджера для интеграции с Keycloak #

  • В файле конфигурации менеджера ppem-manager.yml укажите следующие параметры для интеграции с Keycloak:

        oidc:
          issuer: keycloak_API_URL
          client_id: идентификатор_клиента_ppem
          client_secret: секрет_клиента_ppem
          login_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:

  1. Из выпадающего списка Группа выберите OIDC.

  2. В поле 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, используемых в большинстве приложений. Процесс включает следующие этапы:

  1. Первичная аутентификация:

    1. Пользователь Keycloak указывает сетевой адрес сервера, в котором установлен менеджер (далее — сервер PPEM), в адресной строке браузера, например https://ppem.example.com.

    2. Сервер PPEM определяет, что у пользователя Keycloak не хватает cookie с токенами доступа и обновления и перенаправляет этого пользователя в веб-приложение Keycloak.

    3. Пользователь Keycloak вводит учётные данные.

    4. Если учётные данные пользователя действительны, Keycloak отправляет запрос, содержащий одноразовый код, серверу PPEM.

    5. Сервер PPEM обменивает одноразовый код на токены доступа и обновления и создаёт cookie с этими токенами для пользователя Keycloak.

      Теперь у пользователя Keycloak есть доступ к PPEM.

  2. Автоматическое обновление токена:

    1. При выполнении каждого действия в веб-приложении сервер PPEM проверяет наличие у пользователя Keycloak cookie с токенами доступа и обновления.

    2. При необходимости сервер PPEM обменивает существующий токен обновления на новые токены доступа и обновления и создаёт cookie с этими токенами для пользователя Keycloak.

    3. Выполняется действие.

  3. Выход:

    1. Пользователь Keycloak выходит из веб-приложения PPEM.

    2. Пользователь Keycloak перенаправляется в веб-приложение Keycloak, в котором прерывается пользовательский сеанс, и токены доступа и обновления удаляются.

    3. Пользователь Keycloak перенаправляется в веб-приложение PPEM. Из-за отсутствия токенов доступа и обновления пользователь перенаправляется в веб-приложение Keycloak, и ему предлагается ввести учётные данные.