Общие сведения
Polymatica Analytics поддерживает любого провайдера учётных записей (далее – провайдер) по стандарту OAuth2/OpenID Connect. Для Polymatica Analytics может быть настроено и одновременно использовано произвольное количество провайдеров.
Настройка OAuth2/OpenID Connect осуществляется через конфигурационный файл (далее – конфигурация) /etc/polymatica/polymatica.conf. После изменений в конфигурации необходимо перезапускать сервер, чтобы изменения вступили в силу.
Аутентификация и авторизация через провайдера могут выполняться следующими тремя способами.
- Аутентификация через провайдера, и авторизация через права доступа указанной группы пользователей Polymatica Analytics.
В конфигурации указывается группа пользователей Polymatica Analytics, в которую включаются пользователи. Может быть определена только одна группа.
Если группа не существует, она создается в состоянии по умолчанию – без ролей и без доступа к мультисферам.
Если пользователь не существует, он создается в состоянии по умолчанию – без ролей и без доступа к мультисферам, и включается в указанную группу. Если пользователь существует, он по умолчанию исключается из других групп, включается в указанную группу, его роли аннулируются, роли группы становятся доступны.
Пример использования. - Аутентификация через провайдера, и авторизация через права доступа групп пользователей Polymatica Analytics, которые определяются из токена провайдера.
В конфигурации указывается поле токена, которое должно содержать список групп пользователей Polymatica Analytics.
Если группа из списка не существует, она создается в состоянии по умолчанию – без ролей и без доступа к мультисферам.
Если пользователь не существует, он создается в состоянии по умолчанию – без ролей и без доступа к мультисферам, и включается в группы из списка. Если пользователь существует, он по умолчанию исключается из других групп, включается в группы из списка, его роли аннулируются, роли групп становятся доступны.
Пример использования. - Аутентификация через провайдера, и авторизация через права доступа пользователя, которые определяются из токена провайдера.
В конфигурации указывается поле токена, которое должно содержать массив групп пользователей. Из этих групп система формирует список доступных мультисфер (мультисферы, к которым в группах предоставлен хоть какой-нибудь доступ), чтобы предоставить к ним права доступа, следуя определенному в конфигурации правилу.
В конфигурации также определяется правило, следуя которому система формирует права доступа пользователя. Правило состоит из поля токена, которое должно содержать список элементов размерности, и размерности, в которой система ищет полученные из токена элементы. Когда в какой-либо мультисфере из списка доступных находится указанная правилом размерность, а в этой размерности находятся полученные из токена элементы, эта мультисфера с доступом к этим элементам добавляется в права доступа пользователя.
Если группа из массива не существует, она создается в состоянии по умолчанию – без ролей и без доступа к мультисферам.
Если пользователь не существует, он создается с правами доступа согласно конфигурации. Если пользователь существует, он по умолчанию исключается из других групп, его роли аннулируются, права доступа переопределяются согласно конфигурации. Роли групп, через которые формируется список доступных мультисфер НЕ становятся доступны пользователю.
Пример использования.
Общие параметры OAuth2/OpenID Connect
Параметр | Тип значения | Назначение | Состояние по умолчанию | Обязательный | Описание |
---|---|---|---|---|---|
plm.login.oauth2.enabled | – | Переключатель | Параметр отсутствует | Нет | Включить/выключить поддержку аутентификации через провайдеров OAuth2/OpenID Connect |
plm.login.oauth2.redirect_hostname | string | URI | http://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. Принимает значения:
|
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 | – | Переключатель | Параметр отсутствует | Нет | После успешной аутентификации не назначать описанные в токене группы пользователю и не исключать пользователя из уже назначенных групп. Переданные в токене группы не будут созданы. Обратите внимание! В присутствии параметра, параметр |
skip_token_roles | – | Переключатель | Параметр отсутствует | Нет | После успешной аутентификации не применять описанные в токене роли и не сбрасывать уже назначенные |
Параметры Claims
Группа параметров объекта claims служит для отображения ключей в идентификационном токене на смысловые значения (mapping). Все параметры claims необходимо указывать с префиксом
plm.login.oauth2.providers[i].claims.
Параметр | Тип значения | Назначение | Состояние по умолчанию | Обязательный | Описание |
---|---|---|---|---|---|
login | Строка | Поле в идентификационном токене | – | Да | Название поля в идентификационном токене, содержащее логин пользователя. Обратите внимание! Если логин пользователя в провайдере содержит недопустимые символы (точка, пробел), они автоматически заменяются на нижнее подчеркивание. |
Строка | Поле в идентификационном токене | – | Нет | Название поля в идентификационном токене, содержащее адрес электронной почты пользователя | |
fullname | Строка | Поле в идентификационном токене | – | Нет | Название поля в идентификационном токене, содержащее полное ФИО пользователя |
permissions | Строка | Поле в идентификационном токене | – | Нет | Название поля в идентификационном токене, содержащее список объектов, описывающих роли пользователя в системе Avanpost FAM |
groups | Строка | Поле в идентификационном токене | – | Нет | Название поля в идентификационном токене, которое должно содержать список групп Polymatica Analytics, в которые требуется включить пользователя |
roles | Строка | Поле в идентификационном токене | – | Нет | Название поля в идентификационном токене, которое должно содержать список групп Polymatica Analytics, по которым определяются доступные мультисферы для выдачи прав доступа пользователю |
elements_access[i].dims_regex | Строка | Регулярное выражение | Размерность, которую нужно найти в доступных мультисферах, получаемых через параметр Каждый i-ый индекс должен определять одну размерность | ||
elements_access[i].claim | Массив строк | Объект в поле идентификационного токена | – | Нет | Элементы размерности Одному i-му параметру Обратите внимание! Все объекты Например: { ... "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 (см. рисунок ниже).
По нажатию кнопки открывается веб-интерфейс провайдера на странице аутентификации. В случае успешной аутентификации, провайдер перенаправляет на адрес, указанный в параметре 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".