Общие сведения


Система позволяет использовать метод аутентификации OIDC со следующими ограничениями.

  • Полноценная учетная запись пользователя не может быть создана в системе со стороны провайдера аутентификации. Если аутентифицирующийся пользователь не имеет учетной записи в системе, учетная запись будет создана без ролей, принадлежности к группам и правил ограничений данных для датасетов.
  • Учетная запись пользователя не может быть удалена из системы провайдером аутентификации.
  • При выходе из системы сообщение о завершении сессии не отправляется провайдеру аутентификации, что в свою очередь не позволяет:
    • завершить сессию и начать новую под другим пользователем – сессия завершится по истечении срока сессии, установленного в провайдере;
    • использовать единый выход.
  • При завершении сессии в провайдере аутентификации система не получает сообщения о завершении сессии.


Провайдер OIDC генерирует и сохраняет токен сессии Open ID. Данный токен по умолчанию будет использоваться при проверке прав доступа пользователя к опубликованным компонентам или встроенным пользовательским компонентам из сторонних систем, использующих тот же провайдер Open ID.

Если система устанавливается из пакетов, то при настройке аутентификации OIDC необходимо внести изменения в конфигурацию веб-сервера nginx: 

/etc/nginx/conf.d/polymatica.conf:

proxy_buffer_size 4k|8k;
proxy_busy_buffers_size 8k|16k;


Это позволит осуществлять аутентификацию даже при очень длинных токенах.

 Настройка провайдера аутентификации на примере Keycloak


Для примера настроим провайдера аутентификации Keycloak для одной системы Polymatica Dashboards TN (далее – система), чтобы использовать провайдера для аутентификации в системе.

Для настройки нужно иметь доступ к консоли администратора Keycloak (далее – консоль администратора). При настройке будем обращаться к документации Keycloak, стандарту RFC6749 и документации OpenID Foundation, актуальным на момент написания.

1. Создаем новую область (realm). Область определяет границы взаимодействия систем, пользователей этих систем, их права, роли и т. п.

В консоли администратора, в левом верхнем углу страницы кликаем выпадающий список и кликаем в нем кнопку Create Realm.


Выпадающий список областей


Далее на открывшейся справа странице Create Realm вводим в поле Realm name название области и кликаем кнопку Create.


Страница Create realm


2. Настроим область: установим название, отображаемое на странице аутентификации. А также скопируем значение для параметра POLYMATICA_CORE_OIDC_PROVIDER_ISSUER, который потребуется задать позже при настройке метода аутентификации в системе.

В навигационной панели в левой части страницы кликаем вкладку Realm settings. На открывшейся справа странице, в поле HTML Display name вводим название для отображения на странице аутентификации – Polymatica. Кликаем кнопку Save.


Вкладка Realm settings. В заголовке вкладки отображается название области


Кликаем внизу страницы ссылку OpenID Endpoint Configuration, чтобы открыть метаданные провайдера, в открывшейся вкладке браузера находим ключ "issuer" (обычно самый верхний после начала) и копируем значение, в нашем случае "https://dev-keycloak.polymatica.ru/auth/realms/Docs-realm".


Копируем значение ключа "issuer" для дальнейшего использования в параметре POLYMATICA_CORE_OIDC_PROVIDER_ISSUER


3. Добавим систему в область. 

В навигационной панели в левой части страницы кликаем вкладку Clients. На открывшейся справа странице кликаем кнопку Create client.


Кнопка Create client на странице Clients


На открывшейся странице заполняем произвольным значением поле Client ID и кликаем внизу кнопку Next.


Заполнили поле Client ID понятным нам произвольным значением


На открывшейся странице переводим переключатель Client authentication в положение On и кликаем внизу кнопку Save. Параметр Client authentication определяет используемый тип клиента OpenID Connect.


Перевели переключатель Client authentication в положение On


4. Настроим добавленную систему: укажем допустимые адреса переадресации для перехода после аутентификации.

На странице системы Docs находим поле Valid redirect URIs. Так как мы используем тип клиента confidential, то адрес переадресации может быть любым: ставим символ «*», что означает – любое значение. Кликаем внизу кнопку Save.


Добавили допустимый адрес переадресации


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

Переходим на странице системы Docs в секцию Credentials. Находим поле Client secret и в правой его части кликаем кнопку Copy to clipboard. Сохраняем скопированное значение в файл, чтобы не потерять (например, в блокнот).


Скопировали Client secret


6. Добавим учетную запись пользователя системы. Если учетная запись не существует в системе, она автоматически создается с ограничениями: заполняются только поля «Логин» и «E-mail», учетная запись не имеет ролей.

В навигационной панели в левой части страницы кликаем вкладку Users. На открывшейся справа странице Users кликаем кнопку Create new user.


Кликаем кнопку Create new user


На открывшейся странице Create user заполняем все поля формы, в том числе поля First name и Last name, что позволит, когда поддержка передаваемых полей будет доработана, не возвращаться к заполнению этих полей. После заполнения полей кликаем внизу кнопку Create


Заполнили поля формы учетными данными пользователя


На открывшейся странице с логином пользователя в заголовке перейдем в секцию Credentials и кликнем на ней кнопку Set password.


Секция Credentials страницы пользователя


В открывшемся окне Set password укажем в обоих полях временный пароль учетной записи для входа в систему и кликнем кнопку Save

Чтобы использовать установленный пароль в качестве постоянного, следует выключить параметр Temporary.


Окно установки пароля учетной записи


Подтвердим установку пароля – кликнем кнопку Save password.



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

На этом шаге мы завершили настройку провайдера аутентификации Keycloak для одного системы. Далее необходимо настроить метод аутентификации OIDC в системе.

Настройка метода аутентификации OIDC в системе


Чтобы включить в системе метод аутентификации OIDC, выполните следующие действия.

  1. Добавьте SSL-сертификат провайдера аутентификации.
    • Для системы, установленного с использованием пакетов:
      1. Добавьте сертификат в директорию /usr/local/share/ca-certificates/ операционной системы окружения.
      2. Выполните команду:

        update-ca-certificates
    • Для системы, установленного с использованием Docker:
      1. Добавьте сертификат в скрипт:

        #!/bin/bash
        
        echo "inserting certificate"
        
        cat << EOF >> /usr/local/share/ca-certificates/сертификат.crt
        -----BEGIN CERTIFICATE-----
        тело_сертификата
        -----END CERTIFICATE-----
        EOF
        
        echo "updating CA"
        update-ca-certificates
        
        exit 0

        где сертификат – файл, в который следует записать сертификат;
               тело_сертификата – содержимое сертификата.

      2. Добавьте скрипт для выполнения в контейнер сервиса manager (см. Приложение В. Выполнение скрипта в контейнере сервиса при запуске контейнера).

  1. Укажите параметры метода аутентификации OIDC в конфигурации системы (см. Настраиваемые параметры системы). Требуется указать следующие параметры и их значения.

    POLYMATICA_CORE_OIDC_AUTH_METHOD_ACTIVE=true
    POLYMATICA_CORE_OIDC_PROVIDER_NAME=keycloak_OP
    POLYMATICA_CORE_OIDC_PROVIDER_ISSUER=https://dev-keycloak.polymatica.ru/auth/realms/Docs-realm
    POLYMATICA_CORE_OIDC_PROVIDER_REDIRECT_URL=https://stage-docs.platform.polymatica.ru/auth/oidc-callback
    POLYMATICA_CORE_OIDC_PROVIDER_CLIENT_ID=stage-docs
    POLYMATICA_CORE_OIDC_PROVIDER_CLIENT_SECRET=jmMEby8L9Jo0TNweolgSiLaXR4AEGNna
    POLYMATICA_CORE_OIDC_PROVIDER_SCOPE=openid email profile
    POLYMATICA_CORE_OIDC_PROVIDER_CLAIMS_PREFERRED_USERNAME_KEY=preferred_username
    POLYMATICA_CORE_OIDC_PROVIDER_CLAIMS_EMAIL_KEY=email
    POLYMATICA_CORE_OIDC_PROVIDER_CLAIMS_FIRST_NAME_KEY=given_name
    POLYMATICA_CORE_OIDC_PROVIDER_CLAIMS_LAST_NAME_KEY=family_name
    POLYMATICA_CORE_OIDC_PROVIDER_CLAIMS_MIDDLE_NAME_KEY=middle_name

    где POLYMATICA_CORE_OIDC_PROVIDER_NAME – произвольно выбранное наименование провайдера аутентификации;
          POLYMATICA_CORE_OIDC_PROVIDER_ISSUER – значение ключа issuer в метаданных провайдера;
          POLYMATICA_CORE_OIDC_PROVIDER_REDIRECT_URL – адрес клиента для перенаправления после успешной аутентификации в провайдере, должен иметь вид https://хост/auth/oidc-callback;
          POLYMATICA_CORE_OIDC_PROVIDER_SCOPE  – запрашиваемые системой доступы;
          POLYMATICA_CORE_OIDC_PROVIDER_CLIENT_ID – Client ID, заданный при настройке провайдера;
          POLYMATICA_CORE_OIDC_PROVIDER_CLIENT_SECRET – Client secret, полученный при настройке провайдера;
          POLYMATICA_CORE_OIDC_PROVIDER_CLAIMS_PREFERRED_USERNAME_KEY – параметр, определяющий логин пользователя системы, в который передаем значение ключа preferred_username из токена;
          POLYMATICA_CORE_OIDC_PROVIDER_CLAIMS_EMAIL_KEY – параметр, определяющий e-mail пользователя системы, в который передаем значение ключа email из токена;
          POLYMATICA_CORE_OIDC_PROVIDER_CLAIMS_FIRST_NAME_KEY – параметр, определяющий имя пользователя системы, в который передаем значение ключа given_name из токена;
          POLYMATICA_CORE_OIDC_PROVIDER_CLAIMS_LAST_NAME_KEY – параметр, определяющий фамилию пользователя системы, в который передаем значение ключа family_name из токена;
          POLYMATICA_CORE_OIDC_PROVIDER_CLAIMS_MIDDLE_NAME_KEY– параметр, определяющий отчество пользователя системы, в который передаем значение ключа middle_name из токена.

  2. Перезапустите систему.
    • Для системы, установленного с использованием пакетов, выполните команду:

      systemctl restart polymatica-platform-manager
    • Для системы, установленного с использованием Docker, выполните команду:

      cd /srv/platform && docker compose up -d --remove-orphans || docker-compose up -d --remove-orphans

При правильно выполненной настройке на странице входа в систему должна отображаться вкладка «OpenID»:

Вкладка «OpenID» слева от вкладки «Стандартный»


По клику вкладки выполняется переадресация на страницу аутентификации OIDC-провайдера.

Аутентификация OIDC по умолчанию


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

Чтобы установить метод аутентификации OIDC выбранным по умолчанию, в конфигурации системы укажите параметр со значением:

AUTH_DEFAULT_METHOD=openIDConnect

после чего перезапустите систему.

При правильно выполненной настройке страница входа в систему должна открываться на вкладке «OpenID», после чего автоматически выполняется переадресация на страницу аутентификации OIDC-провайдера.

Можно отключить появление страницы аутентификации провайдера, задав в файле конфигурации параметры POLYMATICA_CORE_OIDC_PROVIDER_SKIP_CLIENT_ID_CHECK и POLYMATICA_CORE_OIDC_PROVIDER_TOKEN_AUTH. Тогда при переходе из сторонней системы сразу будет открываться окно авторизации Polymatica Dashboards.


  • Нет меток