Протокол OIDC. Аутентификация через web SSO

Протокол включает в себя авторизацию по OAuth2.

Настройка параметров протокола выполняется в конфигурационном файле external-settings.xml.

Доступные параметры настройки

  • clientId — идентификатор клиента в провайдере аутентификации.
  • clientSecret — секретный ключ для установления доверительных отношений между стендом SMP и сервером авторизации. Подлежит шифрованию при включенном параметре encryption.enabled=true.
  • discoverUri — URI для чтения метаданных провайдера аутентификации.
  • gateway — URL-адрес для выхода.
  • scope — scope параметров, запрашиваемых у провайдера аутентификации. Параметры перечисляются через пробел.
  • clientAuthenticationMethod — метод аутентификации при обращении к сервису выдачи маркеров. Значение по умолчанию: client_secret_basic.
  • searchStrategy — стратегия поиска сотрудников.

    Представляет собой мапу, в которой ключом является код атрибута сотрудника в SMP, а значением код параметра пользователя в провайдере аутентификации.

    При сопоставлении пользователя по строковым атрибутам происходит регистрозависимый поиск (например, по email).

    Доступны 4 варианта стратегии:

    • and — стратегия поиска сотрудников по совпадению всех атрибутов.

      Поиск выполняется по указанным атрибутам сотрудника в SMP и значениям, полученным от провайдера аутентификации, с условием "И".

      Copy
          <and>
              <attributes>
              <entry>
                  <idpId></idpId>
                  <smpId></smpId>
              </entry>
              </attributes>
          </and>
    • or — стратегия поиска сотрудников по совпадению одного из атрибутов.

      Поиск выполняется по указанным атрибутам сотрудника в SMP и значениям, полученным от провайдера аутентификации, с условием "ИЛИ".

      Copy
          <or>
              <attributes>
              <entry>
                   <idpId></idpId>
                  <smpId></smpId>
              </entry>
              </attributes>
          </or>
    • oneByOne — стратегия поиска сотрудников по порядку в зависимости от присутствия значений атрибутов сотрудника в SMP в ответе от провайдера аутентификации.

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

      Copy
          <oneByOne>
              <attributes>
              <entry>
                  <idpId></idpId>
                  <smpId></smpId>
              </entry>
              </attributes>
          </oneByOne>
    • script — стратегия поиска сотрудников с помощью скрипта.

      В контексте скрипта доступна мапа, содержащая:

      • коды параметров, запрошенных у провайдера;
      • значения параметров, полученных от провайдера;
      • коды атрибутов сотрудника в SMP, по которым выполняется поиск сотрудника.

      Параметр <scriptData> содержит скрипт в формате CDATA.

      Возвращаемое значение:

      • UUID объекта класса "Сотрудник" (employee), для которого необходимо выполнить аутентификацию;
      • ошибка, если не найден ни один сотрудник или найдено больше одного.
      Copy
          <script>
              <attributes>
              <entry>
                  <idpId></idpId>
                  <smpId></smpId>
              </entry>
              </attributes>
              <scriptData></scriptData>
          </script>

Пример структуры конфигурационного файла

Структура конфигурационного файла external-settings.xml является общей для аутентификации по протоколу OIDC независимо от провайдера.

Copy
<?xml version="1.0" encoding="UTF-8"?>
<ext:configuration xmlns:ext="http://www.naumen.ru/externalSettings" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                    xsi:schemaLocation="http://www.naumen.ru/externalSettings ../../../../../../../../sdng-generated/src/main/resources/xsd/externalSettings.xsd">
    <settings>
        <protocol>
            <oidc>
                <clientId>smp</clientId>
                <clientSecret>abcdefghijk</clientSecret>
                <discoverUri>https://sso.example.org/auth/realms/myrealm/.well-known/openid-configuration</discoverUri>
                <gateway>https://sso.example.org/auth/realms/myrealm/protocol/openid-connect/logout</gateway>
                <scope>openid email profile</scope>
                <clientAuthenticationMethod>client_secret_basic</clientAuthenticationMethod>
            </oidc>
        </protocol>
        <searchStrategy>
            <and>
                <attributes>
                    <entry>
                        <idpId>email</idpId>
                        <smpId>email</smpId>
                    </entry>
                    <entry>
                        <idpId>name</idpId>
                        <smpId>firstName</smpId>
                    </entry>
                    <entry>
                        <idpId>family_name</idpId>
                        <smpId>lastName</smpId>
                    </entry>
                </attributes>
            </and>
        </searchStrategy>
        <other>
            <entry>
                <key>other</key>
                <value>settings</value>
            </entry>
        </other>
    </settings>
</ext:configuration>

Настройка взаимодействия с провайдерами