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

Polymatica Analytics поддерживает любого провайдера учётных записей (далее – провайдер) по стандарту OAuth2/OpenID Connect. Для Polymatica Analytics может быть настроено и одновременно использовано произвольное количество провайдеров.

Настройка OAuth2/OpenID Connect осуществляется через конфигурационный файл (далее – конфигурация) /etc/polymatica/polymatica.conf. После изменений в конфигурации необходимо перезапускать сервер, чтобы изменения вступили в силу.

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

  1. Аутентификация через провайдера, и авторизация через права доступа указанной группы пользователей Polymatica Analytics.
    В конфигурации указывается группа пользователей Polymatica Analytics, в которую включаются пользователи. Может быть определена только одна группа.
    Если группа не существует, она создается в состоянии по умолчанию – без ролей и без доступа к мультисферам.
    Если пользователь не существует, он создается в состоянии по умолчанию – без ролей и без доступа к мультисферам, и включается в указанную группу. Если пользователь существует, он по умолчанию исключается из других групп, включается в указанную группу, его роли аннулируются, роли группы становятся доступны.
    Пример использования.

  2. Аутентификация через провайдера, и авторизация через права доступа групп пользователей Polymatica Analytics, которые определяются из токена провайдера.
    В конфигурации указывается поле токена, которое должно содержать список групп пользователей Polymatica Analytics.
    Если группа из списка не существует, она создается в состоянии по умолчанию – без ролей и без доступа к мультисферам.
    Если пользователь не существует, он создается в состоянии по умолчанию – без ролей и без доступа к мультисферам, и включается в группы из списка. Если пользователь существует, он по умолчанию исключается из других групп, включается в группы из списка, его роли аннулируются, роли групп становятся доступны.
    Пример использования.

  3. Аутентификация через провайдера, и авторизация через права доступа пользователя, которые определяются из токена провайдера.
    В конфигурации указывается поле токена, которое должно содержать массив групп пользователей. Из этих групп система формирует список доступных мультисфер (мультисферы, к которым в группах предоставлен хоть какой-нибудь доступ), чтобы предоставить к ним права доступа, следуя определенному в конфигурации правилу.
    В конфигурации также определяется правило, следуя которому система формирует права доступа пользователя. Правило состоит из поля токена, которое должно содержать список элементов размерности, и размерности, в которой система ищет полученные из токена элементы. Когда в какой-либо мультисфере из списка доступных находится указанная правилом размерность, а в этой размерности находятся полученные из токена элементы, эта мультисфера с доступом к этим элементам добавляется в права доступа пользователя.
    Если группа из массива не существует, она создается в состоянии по умолчанию – без ролей и без доступа к мультисферам.
    Если пользователь не существует, он создается с правами доступа согласно конфигурации. Если пользователь существует, он по умолчанию исключается из других групп, его роли аннулируются, права доступа переопределяются согласно конфигурации. Роли групп, через которые формируется список доступных мультисфер НЕ становятся доступны пользователю.
    Пример использования.

Общие параметры OAuth2/OpenID Connect

ПараметрТип значенияНазначениеСостояние по умолчаниюОбязательныйОписание
plm.login.oauth2.enabled
ПереключательПараметр отсутствуетНетВключить/выключить поддержку аутентификации через провайдеров OAuth2/OpenID Connect
plm.login.oauth2.redirect_hostname
stringURIhttp://localhostДа, если поддержка аутентификации включенаАбсолютное базовое имя хоста для обратного перенаправления из провайдера. Имя должно указывать на текущий сервер Polymatica Analytics. Может содержать порт. Не должен содержать что-либо после authority-части URI
plm.login.oauth2.verify_ssl
ПереключательПараметр отсутствуетНетВыполнять проверку SSL-сертификата
plm.login.oauth2.state_lifetime
intВремя, сек.600НетВремя жизни идентификаторов состояний "state" для аутентификации по протоколу OAuth2
plm.login.oauth2.debug_print_sensitive_content
ПереключательПараметр отсутствуетНетЗаписывать в лог персональные данные пользователей, получаемые от провайдеров, в случае возникновения ошибок


Управление множеством провайдеров в конфигурации

Конфигурируя параметры очередного провайдера используйте с ними префикс

plm.login.oauth2.providers[i].

где i – порядковый номер конфигурируемого провайдера.

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

plm.login.oauth2.providers[i].enabled

Как только для i-го провайдера НЕ обнаруживается эта запись, поиск записей останавливается.

Если необходимо отключить i-го провайдера, но оставить работающим (i+1)-го, то следует указать параметры

plm.login.oauth2.providers[i].enabled = false
plm.login.oauth2.providers[i+1].enabled = true

Параметры провайдера

Базовые параметры

ПараметрТип значенияНазначениеСостояние по умолчаниюОбязательныйОписание
enabled
БулевоПереключательfalseДаВключить/выключить i-го провайдера
name
СтрокаТекстДаВнутренний текстовый идентификатор провайдера. Используется в процессе перенаправлений пользователя между провайдером и веб-интерфейсом Polymatica Analytics
localized_name
СтрокаТекстЗначение поля nameНетЛокализованное Название провайдера для веб-интерфейса
icon_uri
СтрокаОтносительный путьНетПуть к иконке провайдера относительно корневой директории веб-интерфейса
client_id
СтрокаИдентификаторДаИдентификатор приложения-клиента, зарегистрированный у провайдера
client_secret
СтрокаТекстНетСекретный ключ, привязанный к приложению-клиенту, зарегистрированному у провайдера
scope
СтрокаТекстНетСписок scopes, запрос на доступ к которым отправляется провайдеру
group_for_users
СтрокаТекстНет

Название группы Polymatica Analytics, в которую добавить пользователя после успешной аутентификации.

В случае отсутствия группы, она будет создана. После завершения всех сессий, группа продолжает существование

flow
СтрокаИдентификаторpkceНет

Способ аутентификации OAuth2/OIDC.

Принимает значения:

  • pkce – (Authorization code with Proof Key for Code Exchange) код авторизации с доказательством обмена ключами, наиболее безопасный вариант аутентификации;
  • code – (Authorization code flow) только код авторизации, базовый безопасный способ аутентификации;
  • egisz – аналог PKCE, но с измененной схемой для аутентификации в ЕГИСЗ, в частности, отличаются параметры для запроса id token по refresh token
authorization_add_redirect_parameter
ПереключательПараметр отсутствуетНетДобавить в запрос клиента на аутентификацию (этап перенаправления клиента с Polymatica Analytics к провайдеру) параметр "redirect_uri" с адресом обратного перенаправления клиента в случае успешной аутентификации
token_add_client_secret
ПереключательПараметр отсутствуетНетДобавить в запрос идентификационного токена параметр "client_secret" со значением секретного ключа приложения
token_pass_parameters_through_body
ПереключательПараметр отсутствуетНетПередавать параметры запроса идентификационного токена через тело запроса. В противном случае параметры будут передаваться через сам URI-запрос (после символа "?")
use_groups_whitelist
ПереключательПараметр отсутствуетНет

При входе пользователя проверять список его доступных групп на соответствие "белому списку" заранее заданных имён групп (см. параметр groups_whitelist). Если пользователь имеет хотя бы одну группу из списка, он будет допущен в систему.

Пример использования

groups_whitelist
МассивСписок строкПараметр отсутствуетНет, если отсутствует параметр use_groups_whitelist

Задать массив групп пользователей, которым разрешено входить в систему.

Пример использования

claims
ОбъектГруппа параметровДа

Отображение ключей идентификационного токена на смысловое значение (mapping).

См. таблицу ниже

metadata
ОбъектГруппа параметровДа

Настройка параметров адресов провайдера для выполнения операций в рамках OAuth2/OIDC.

См. таблицу ниже

skip_token_permissions

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

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

Обратите внимание!

В присутствии параметра, параметр use_groups_whitelist игнорируется.

skip_token_roles
ПереключательПараметр отсутствуетНетПосле успешной аутентификации не применять описанные в токене роли и не сбрасывать уже назначенные

Параметры Claims

Группа параметров объекта claims служит для отображения ключей в идентификационном токене на смысловые значения (mapping). Все параметры claims необходимо указывать с префиксом

plm.login.oauth2.providers[i].claims.
ПараметрТип значенияНазначениеСостояние по умолчаниюОбязательныйОписание
login
СтрокаПоле в идентификационном токенеДа

Название поля в идентификационном токене, содержащее логин пользователя.

Обратите внимание!

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

email
СтрокаПоле в идентификационном токенеНетНазвание поля в идентификационном токене, содержащее адрес электронной почты пользователя
fullname
СтрокаПоле в идентификационном токенеНетНазвание поля в идентификационном токене, содержащее полное ФИО пользователя
permissions
(Только Avanpost FAM)
СтрокаПоле в идентификационном токенеНетНазвание поля в идентификационном токене, содержащее список объектов, описывающих роли пользователя в системе Avanpost FAM
groups
СтрокаПоле в идентификационном токенеНет

Название поля в идентификационном токене, которое должно содержать список групп Polymatica Analytics, в которые требуется включить пользователя

roles
СтрокаПоле в идентификационном токенеНет

Название поля в идентификационном токене, которое должно содержать список групп Polymatica Analytics, по которым определяются доступные мультисферы для выдачи прав доступа пользователю

elements_access[i].dims_regex
СтрокаРегулярное выражение

Размерность, которую нужно найти в доступных мультисферах, получаемых через параметр roles.

Каждый i-ый индекс должен определять одну размерность

elements_access[i].claim
Массив строкОбъект в поле идентификационного токенаНет

Элементы размерности elements_access.dims_regex, на которые следует выдать права доступа.

Одному i-му параметру elements_access[i].dims_regex должен соответствовать один i-ый параметр elements_access[i].claim.

Обратите внимание!

Все объекты elements_access.claim должны находиться в поле токена с ключом attributes.

Например:

{
...
  "attributes": {
    "elements_access_object_1": [
      "element_to_access",
      "another_element_to_access"
    ],
    "elements_access_object_2": [
      "element_to_access",
      "another_element_to_access"
    ]
  },
...
}

Параметры Metadata

Все параметры метаданных необходимо указывать с префиксом

plm.login.oauth2.providers[i].metadata.
ПараметрТип значенияНазначениеСостояние по умолчаниюОбязательныйОписание
url
СтрокаАбсолютный URI-ДаАдрес провайдера OAuth2/OpenID Connect
use_oidc_discovery
ПереключательПараметр отсутствуетНетОбновлять параметры провайдера через протокол OIDC Discovery. Если провайдер не поддерживает этот протокол, то невозможность получить параметры приведёт к ошибке
skip_validation
ПереключательПараметр отсутствуетНетПропускать валидацию данных провайдера, полученных по протоколу OIDC Discovery. Может быть полезно в ситуациях, когда, к примеру, issuer, получаемый по протоколу OIDC Discovery, не совпадает с адресом провайдера
expiration_time
ЦелоеВремя, сек.600НетВремя, в течение которого Polymatica Analytics считает данные провайдера, полученные по протоколу OIDC Discovery, актуальными. По истечении данного периода времени происходит обновление данных провайдера
authorization_endpoint
СтрокаАбсолютный URIДа, если параметр use_oidc_discovery отсутствуетАдрес провайдера для перенаправления пользователя на этапе запроса аутентификации через провайдера
token_endpoint
СтрокаАбсолютный URIДа, если параметр use_oidc_discovery отсутствуетАдрес провайдера для получения сервером Polymatica Analytics идентификационного токена пользователя, токена обновления, а также ключа для доступа к API провайдера
userinfo_endpoint
СтрокаАбсолютный URIДа, если параметр use_oidc_discovery отсутствуетАдрес провайдера для получения дополнительных данных о пользователе. В некоторых случаях, при запросе данных пользователя по этому адресу, провайдер сообщает больше данных

Примеры способов авторизации с использованием Keycloak

Принятые определения

В разделе используются следующие определения (см. таблицу ниже).

ТерминОпределение
RealmОбласть провайдера – 
ClientКлиент в области провайдера, представляющий приложение
GroupГруппа пользователей в области провайдера
UserПользователь в области провайдера
ScopeНабор привилегий
MapperОтображение
ClaimПоле токена

Авторизация через права доступа указанной группы пользователей Polymatica Analytics

Авторизация пользователя включением в группу пользователей Polymatica Analytics. Группа указывается в конфигурации через параметр group_for_users.

При таком способе авторизации, пользователя можно включить только в одну группу Polymatica Analytics. По умолчанию пользователь исключается из других групп (параметр skip_token_groups меняет поведение по умолчанию).

Обратите внимание!

В этом примере предполагается, что в провайдере существуют область, клиент и пользователь, предназначенные для Polymatica Analytics.

1. Определяем в файле конфигурации /etc/polymatica/polymatica.conf следующие параметры.


###### OAuth2/OpenID Connect

# Включение поддержки OAuth2/OpenID Connect.
plm.login.oauth2.enabled

# Адрес площадки, с которой происходит обращение к провайдеру.
plm.login.oauth2.redirect_hostname = https://analytics.example.com

# Включение проверки сертификата провайдера.
plm.login.oauth2.verify_ssl

### Определение параметров первого провайдера.
plm.login.oauth2.providers[0].enabled = true

# Произвольно выбранное обозначение провайдера.
plm.login.oauth2.providers[0].name = KeycloackIdP

# Изображение keycloak.png предварительно добавлено в директорию /usr/share/polymatica/web/images.
plm.login.oauth2.providers[0].icon_uri = /images/keycloak.png

# Значение client_id клиента Polymatica Analytics, заданное в провайдере.
plm.login.oauth2.providers[0].client_id = ClientAnalytics

# Значение client_secret, сгенерированное для ClientAnalytics в провайдере.
plm.login.oauth2.providers[0].client_secret = Hn7BLFHejQolszjbAwuvmsCFiOEtesLA  

# Включение использования протокола OIDC Discovery.
plm.login.oauth2.providers[0].metadata.use_oidc_discovery

# Адрес issuer провайдера.
plm.login.oauth2.providers[0].metadata.url = https://keycloak.example.com/auth/realms/Docs-realm

# Для Keycloack требуется передавать адрес перенаправления, иначе возвращается ошибка "invalid_redirect_uri".
plm.login.oauth2.providers[0].authorization_add_redirect_parameter

# Для Keycloack требуется передавать значение client_secret, иначе возвращается ошибка "invalid_request", "Missing form parameter: grant_type".
plm.login.oauth2.providers[0].token_add_client_secret

# Для Keycloack требуется передавать значение client_secret в теле запроса.
plm.login.oauth2.providers[0].token_pass_parameters_through_body

# Группа пользователей в Polymatica Analytics. Может быть указана только одна группа в параметре. Когда параметр определен несколько раз, используется последнее определение.
plm.login.oauth2.providers[0].group_for_users = Группа 1

# Список запрашиваемых scopes.
plm.login.oauth2.providers[0].scope = openid profile email

# Отображение поля токена preferred_username на логин аутентифицируемого пользователя.
plm.login.oauth2.providers[0].claims.login = preferred_username

# Отображение поля токена  email на email аутентифицируемого пользователя.
plm.login.oauth2.providers[0].claims.email = email


2. Сохраняем изменения в файле и перезапускаем приложение.


systemctl restart polymatica.service


3. Обращаемся к веб-интерфейсу приложения. Видим в правом нижнем углу области входа кнопку с изображением, которое мы задали параметром plm.login.oauth2.providers[0].icon_uri (см. рисунок ниже).


Веб-интерфейс приложения Polymatica Analytics


По нажатию кнопки открывается веб-интерфейс провайдера на странице аутентификации. В случае успешной аутентификации, провайдер перенаправляет на адрес, указанный в параметре plm.login.oauth2.redirect_hostname

Авторизация через права доступа групп пользователей Polymatica Analytics

Авторизация пользователя включением в группы пользователей Polymatica Analytics. Список групп определяется из токена провайдера.

При таком способе авторизации, пользователя можно включать в одну и более групп Polymatica Analytics. По умолчанию пользователь исключается из других групп (параметр skip_token_groups меняет поведение по умолчанию).


Обратите внимание!

В этом примере предполагается, что в провайдере существуют область, клиент, группа и пользователь, включенный в группу, предназначенные для Polymatica Analytics.

Настройка провайдера

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

1. Добавим в группу провайдера новый атрибут, значением которого будет список групп Polymatica Analytics.

Переходим в панели провайдера на вкладку Groups, открываем группу, переходим на вкладку Attributes. Добавляем атрибут с параметрами (см. рисунок ниже):

    • Key: pa_groups_attribute;
    • Value: список групп Polymatica Analytics, разделённых точкой с запятой.


Добавление атрибута в группу провайдера


2. Создадим в области, где находится клиент Polymatica Analytics, новый набор привилегий для добавления через него атрибута группы в токен.

Переходим в панели провайдера на вкладку Client scopes, нажимаем кнопку Create client scope. Сохраняем набор с параметрами (см. рисунок ниже):

    • Name: pa_access_scope;
    • Type: Optional;
    • Protocol: OpenID Connect;
    • Include in token scope: On.


Создание набора привелегий


3. Добавим в созданный набор привилегий отображение атрибута группы на поле токена.

Переходим в наборе на вкладку Mappers, нажимаем кнопку Configure a new mapper , во всплывающем окне выбираем User Attribute. Сохраняем отображение с параметрами (см. рисунок ниже):

    • Name: pa_groups_mapper;
    • User Attribute: pa_groups_attribute;
    • Token Claim Name: pa_groups_claim;
    • Claim JSON Type: String;
    • Add to ID token: On;
    • Add to access token: On;
    • Add to userinfo: On;
    • Aggregate attribute values: On.


Добавление отображения в набор привилегий


4. Добавим набор привилегий в наборы привилегий клиента.

Переходим в панели провайдера на вкладку Clients, открываем клиента, переходим на вкладку Client Scopes, нажимаем кнопку Add Client Scope. Во всплывающем окне отмечаем созданный ранее набор привилегий pa_access_scope, нажимаем Add → Optional (см. рисунок ниже).


Добавление набора привилегий в наборы клиента


На этом шаге настройка провайдера закончена.

Настройка Polymatica Analytics

Когда провайдер передает в токене список групп, нам необходимо, чтобы он использовался в Polymatica Analytics для включения в них пользователей. Настроим это.


1. Определяем в файле конфигурации /etc/polymatica/polymatica.conf следующие параметры.


###### OAuth2/OpenID Connect

# Включение поддержки OAuth2/OpenID Connect.
plm.login.oauth2.enabled

# Адрес площадки, с которой происходит обращение к провайдеру.
plm.login.oauth2.redirect_hostname = https://analytics.example.com

# Включение проверки сертификата провайдера.
plm.login.oauth2.verify_ssl

### Определение параметров первого провайдера.
plm.login.oauth2.providers[0].enabled = true

# Произвольно выбранное обозначение провайдера.
plm.login.oauth2.providers[0].name = KeycloackIdP

# Изображение keycloak.png предварительно добавлено в директорию /usr/share/polymatica/web/images.
plm.login.oauth2.providers[0].icon_uri = /images/keycloak.png

# Значение client_id клиента Polymatica Analytics, заданное в провайдере.
plm.login.oauth2.providers[0].client_id = ClientAnalytics

# Значение client_secret, сгенерированное для ClientAnalytics в провайдере.
plm.login.oauth2.providers[0].client_secret = Hn7BLFHejQolszjbAwuvmsCFiOEtesLA  

# Включение использования протокола OIDC Discovery.
plm.login.oauth2.providers[0].metadata.use_oidc_discovery

# Адрес issuer провайдера.
plm.login.oauth2.providers[0].metadata.url = https://keycloak.example.com/auth/realms/Docs-realm

# Для Keycloack требуется передавать адрес перенаправления, иначе возвращается ошибка "invalid_redirect_uri".
plm.login.oauth2.providers[0].authorization_add_redirect_parameter

# Для Keycloack требуется передавать значение client_secret, иначе возвращается ошибка "invalid_request", "Missing form parameter: grant_type".
plm.login.oauth2.providers[0].token_add_client_secret

# Для Keycloack требуется передавать значение client_secret в теле запроса.
plm.login.oauth2.providers[0].token_pass_parameters_through_body

# Список запрашиваемых scopes.
plm.login.oauth2.providers[0].scope = openid profile email pa_access_scope

# Получение из поля токена логина аутентифицируемого пользователя.
plm.login.oauth2.providers[0].claims.login = preferred_username

# Получение из поля токена email аутентифицируемого пользователя.
plm.login.oauth2.providers[0].claims.email = email

# Получение из поля токена групп пользователей для включения аутентифицируемого пользователя.
plm.login.oauth2.providers[0].claims.groups = pa_groups_claim


2. Сохраняем изменения в файле и перезапускаем приложение.


systemctl restart polymatica.service


3. Аналогично, как в предыдущем примере, обращаемся к веб-интерфейсу приложения, нажимаем кнопку входа через провайдера. В случае успешной аутентификации, провайдер перенаправляет на адрес, указанный в параметре plm.login.oauth2.redirect_hostname

Авторизация через права доступа пользователя Polymatica Analytics

Авторизация пользователя предоставлением прямых прав доступа. Права доступа определяются из токена провайдера.

При таком способе авторизации, пользователь НЕ включается в группы Polymatica Analytics. Также по умолчанию пользователь исключается из других групп (параметр skip_token_groups меняет поведение по умолчанию).


Обратите внимание!

В этом примере предполагается, что в провайдере существуют область, клиент, группа и пользователь, включенный в группу, предназначенные для Polymatica Analytics.

Настройка провайдера

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


1. Добавим в группу провайдера новый атрибут, значением которого будет группа Polymatica Analytics.

Переходим в панели провайдера на вкладку Groups, открываем группу, переходим на вкладку Attributes. Добавляем атрибут с параметрами (см. рисунок ниже):

    • Key: pa_roles_attribute;
    • Value: название группы.

Так как Polymatica Analytics ожидает массив, создаем отдельный атрибут pa_roles_attribute для каждой группы.


Добавление атрибута в группу провайдера


2. Создадим в области, где находится клиент Polymatica Analytics, новый набор привилегий для добавления через него атрибута группы в токен.

Переходим в панели провайдера на вкладку Client scopes, нажимаем кнопку Create client scope. Сохраняем набор с параметрами (см. рисунок ниже):

    • Name: pa_access_scope;
    • Type: Optional;
    • Protocol: OpenID Connect;
    • Include in token scope: On.


Создание набора привелегий


3. Добавим в созданный набор привилегий отображение атрибута группы на поле токена.

Переходим в наборе на вкладку Mappers, нажимаем кнопку Configure a new mapper , во всплывающем окне выбираем User Attribute. Сохраняем отображение с параметрами (см. рисунок ниже):

    • Name: pa_roles_mapper;
    • User Attribute: pa_roles_attribute;
    • Token Claim Name: pa_roles_claim;
    • Claim JSON Type: String;
    • Add to ID token: On;
    • Add to access token: On;
    • Add to userinfo: On;
    • Aggregate attribute values: On.


Добавление отображения в набор привилегий


4. Добавим в созданный набор привилегий явно определенное поле токена.

Переходим в наборе на вкладку Mappers, нажимаем кнопку Configure a new mapper , во всплывающем окне выбираем Hardcoded claim. Сохраняем отображение с параметрами (см. рисунок ниже):

    • Name: attributes_mapper;
    • User Attribute: pa_roles_attribute;
    • Token Claim Name: attributes;

      Обратите внимание!

      Поле токена обязательно имеет название attributes!


    • Claim value: объекты с массивами элементов размерности:

      Пример объектов с массивами элементов размерности
      {
        "pa_elements_access_claim_fo": [
          "Центральный федеральный округ",
          "Южный федеральный округ"
        ],
        "pa_elements_access_claim_sub": [
          "Астраханская область",
          "Белгородская область"
        ]
      }
    • Claim JSON Type: JSON;
    • Add to ID token: On;
    • Add to access token: On;
    • Add to userinfo: On.


Добавление в набор привилегий явно определенного поля токена


5. Добавим набор привилегий в наборы привилегий клиента.

Переходим в панели провайдера на вкладку Clients, открываем клиента, переходим на вкладку Client Scopes, нажимаем кнопку Add Client Scope. Во всплывающем окне отмечаем созданный ранее набор привилегий pa_access_scope, нажимаем Add → Optional (см. рисунок ниже).


Добавление набора привилегий в наборы клиента


На этом шаге настройка провайдера закончена.

Настройка Polymatica Analytics

Настроим правила определения прав доступа пользователя.


1. Определяем в файле конфигурации /etc/polymatica/polymatica.conf следующие параметры.


###### OAuth2/OpenID Connect

# Включение поддержки OAuth2/OpenID Connect.
plm.login.oauth2.enabled

# Адрес площадки, с которой происходит обращение к провайдеру.
plm.login.oauth2.redirect_hostname = https://analytics.example.com

# Включение проверки сертификата провайдера.
plm.login.oauth2.verify_ssl

### Определение параметров первого провайдера.
plm.login.oauth2.providers[0].enabled = true

# Произвольно выбранное обозначение провайдера.
plm.login.oauth2.providers[0].name = KeycloackIdP

# Изображение keycloak.png предварительно добавлено в директорию /usr/share/polymatica/web/images.
plm.login.oauth2.providers[0].icon_uri = /images/keycloak.png

# Значение client_id клиента Polymatica Analytics, заданное в провайдере.
plm.login.oauth2.providers[0].client_id = ClientAnalytics

# Значение client_secret, сгенерированное для ClientAnalytics в провайдере.
plm.login.oauth2.providers[0].client_secret = Hn7BLFHejQolszjbAwuvmsCFiOEtesLA  

# Включение использования протокола OIDC Discovery.
plm.login.oauth2.providers[0].metadata.use_oidc_discovery

# Адрес issuer провайдера.
plm.login.oauth2.providers[0].metadata.url = https://keycloak.example.com/auth/realms/Docs-realm

# Для Keycloack требуется передавать адрес перенаправления, иначе возвращается ошибка "invalid_redirect_uri".
plm.login.oauth2.providers[0].authorization_add_redirect_parameter

# Для Keycloack требуется передавать значение client_secret, иначе возвращается ошибка "invalid_request", "Missing form parameter: grant_type".
plm.login.oauth2.providers[0].token_add_client_secret

# Для Keycloack требуется передавать значение client_secret в теле запроса.
plm.login.oauth2.providers[0].token_pass_parameters_through_body

# Список запрашиваемых scopes.
plm.login.oauth2.providers[0].scope = openid profile email pa_access_scope

# Получение из поля токена логина аутентифицируемого пользователя.
plm.login.oauth2.providers[0].claims.login = preferred_username

# Получение из поля токена email аутентифицируемого пользователя.
plm.login.oauth2.providers[0].claims.email = email

# Получение из поля токена групп пользователей Polymatica Analytics, из которых формируется список доступных мультисфер.
plm.login.oauth2.providers[0].claims.roles = pa_roles_claim

### Далее следуют правила, по которым определяются доступные элементы в размерностях доступных мультисфер.

# Правило, по которому в доступных мультисферах следует найти размерность «Федеральный округ» и сделать в ней доступными элементы из списка токена pa_elements_access_claim_fo.
plm.login.oauth2.providers[0].claims.elements_access[0].claim = pa_elements_access_claim_fo
plm.login.oauth2.providers[0].claims.elements_access[0].dims_regex = Федеральный округ

# Правило, по которому в доступных мультисферах следует найти размерность, используя регулярное выражение «Субъект.*» и сделать в ней доступными элементы из списка токена pa_elements_access_claim_sub.
plm.login.oauth2.providers[0].claims.elements_access[1].claim = pa_elements_access_claim_sub
plm.login.oauth2.providers[0].claims.elements_access[1].dims_regex = Субъект.*


2. Сохраняем изменения в файле и перезапускаем приложение.


systemctl restart polymatica.service


3. Аналогично, как в предыдущем примере, обращаемся к веб-интерфейсу приложения, нажимаем кнопку входа через провайдера. В случае успешной аутентификации, провайдер перенаправляет на адрес, указанный в параметре plm.login.oauth2.redirect_hostname

Использование белого списка групп

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

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


###### OAuth2/OpenID Connect

# Включение поддержки OAuth2/OpenID Connect.
plm.login.oauth2.enabled

# Адрес площадки, с которой происходит обращение к провайдеру.
plm.login.oauth2.redirect_hostname = https://analytics.example.com

# Включение проверки сертификата провайдера.
plm.login.oauth2.verify_ssl

### Определение параметров первого провайдера.
plm.login.oauth2.providers[0].enabled = true

# Произвольно выбранное обозначение провайдера.
plm.login.oauth2.providers[0].name = KeycloackIdP

# Изображение keycloak.png предварительно добавлено в директорию /usr/share/polymatica/web/images.
plm.login.oauth2.providers[0].icon_uri = /images/keycloak.png

# Значение client_id клиента Polymatica Analytics, заданное в провайдере.
plm.login.oauth2.providers[0].client_id = ClientAnalytics

# Значение client_secret, сгенерированное для ClientAnalytics в провайдере.
plm.login.oauth2.providers[0].client_secret = Hn7BLFHejQolszjbAwuvmsCFiOEtesLA  

# Включение использования протокола OIDC Discovery.
plm.login.oauth2.providers[0].metadata.use_oidc_discovery

# Адрес issuer провайдера.
plm.login.oauth2.providers[0].metadata.url = https://keycloak.example.com/auth/realms/Docs-realm

# Для Keycloack требуется передавать адрес перенаправления, иначе возвращается ошибка "invalid_redirect_uri".
plm.login.oauth2.providers[0].authorization_add_redirect_parameter

# Для Keycloack требуется передавать значение client_secret, иначе возвращается ошибка "invalid_request", "Missing form parameter: grant_type".
plm.login.oauth2.providers[0].token_add_client_secret

# Для Keycloack требуется передавать значение client_secret в теле запроса.
plm.login.oauth2.providers[0].token_pass_parameters_through_body

# Список запрашиваемых scopes.
plm.login.oauth2.providers[0].scope = openid profile email pa_access_scope

# Получение из поля токена логина аутентифицируемого пользователя.
plm.login.oauth2.providers[0].claims.login = preferred_username

# Получение из поля токена email аутентифицируемого пользователя.
plm.login.oauth2.providers[0].claims.email = email

# Получение из поля токена групп пользователей для включения аутентифицируемого пользователя.
plm.login.oauth2.providers[0].claims.groups = pa_groups_claim

# Включение белого списка групп для этого провайдера.
plm.login.oauth2.providers[0].use_groups_whitelist

# Определение списка групп. 
# Обратите внимание: начиная с закомментированной строки список групп не обрабатывается системой.
plm.login.oauth2.providers[0].groups_whitelist[0] = users_group_1
plm.login.oauth2.providers[0].groups_whitelist[1] = users_group_2
# plm.login.oauth2.providers[0].groups_whitelist[2] = users_group_3
plm.login.oauth2.providers[0].groups_whitelist[3] = users_group_4
plm.login.oauth2.providers[0].groups_whitelist[4] = users_group_5

При попытке авторизации пользователя, не включенного в группу из белого списка, интерфейс Polymatica Analytics сообщает о невозможности соединения, а в лог записывается событие "Failed to handle redirected user from OAuth2 provider: user has no any whitelisted group to log in through this OAuth2 provider".

Связанные страницы

  • Нет меток