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

Polymatica Dashboards поддерживает провайдинг аутентификации через протокол OIDC посредством провайдера СИА (Avanpost FAM).

Аутентификация осуществляется по следующему алгоритму:

  1. Пользователь вводит свой логин и пароль в провайдере СИА (Avanpost FAM),
  2. Polymatica забирает из СИА (Avanpost FAM) токен claims, из которого извлекаются логин, ФИО пользователя, список его групп и ролей.
  3. При выходе из приложения осуществляется выход и из Avanpost FAM.

При получении в токене значения роли "superuser" пользователю автоматически назначается системная роль "Суперпользователь", а другие роли, переданные в токене, пользователю не назначаются и не учитываются системой.


Параметры конфигурации метода

Метод аутентификации СИА (Avanpost FAM) конфигурируется следующими параметрами в файле oidc-providers.json:


ПараметрОписание параметра
{
      "auth_method_active": <true> или <false>,
}
Включение метода аутентификации OIDC
{
      "provider_name": "<name>",
}

Произвольное имя провайдера.

Будет отображаться в интерфейсе на кнопке при настройке нескольких провайдеров.

{
      "provider_issuer": "<key>",
}

Провайдер-поставщик аутентификации

{
      "provider_redirect_url": "<url>",
}

Адрес переадресации после аутентификации в провайдере

{
      "provider_client_id": "<client id>",
}

Client ID, указываемый в провайдере для приложения

{       
      "provider_client_secret": "<client pwd>",
}

Client Secret, выдаваемый провайдером

{
      "provider_scope": "<scope>",
}

Scope, запрашиваемый у провайдера

{
      "provider_claims": {
          "preferred_username_key": "<key>",
      }
}

Ключ claims, по которому будет определено значение username пользователя в Polymatica Dashboards

{
      "provider_claims": {
          "email_key": "<key>",
      }
}

Ключ claims, по которому будет определено значение email пользователя в Polymatica Dashboards

{
      "provider_claims": {
          "first_name_key": "<key>",
      }
}

Ключ claims, по которому будет определено значение "Имя пользователя" в Polymatica Dashboards

{
      "provider_claims": {
          "last_name_key": "<key>",
      }
}

Ключ claims, по которому будет определено значение "Фамилия пользователя" в Polymatica Dashboards

{
      "provider_claims": {
          "middle_name_key": "<key>",
      }
}

Ключ claims, по которому будет определено значение "Отчество пользователя" в Polymatica Dashboards

{
      "provider_claims": {
          "group_key": "<key>",
      }
}

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

Используется только для Avanpost FAM (СИА).

{
      "provider_claims": {
          "role_key": "<key>",
      }
}

Ключ claims, из которого будут добавляться роли пользователя.

Используется только для Avanpost FAM (СИА).

{
      "provider_groups_whitelist": "<list>"
}

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

Используется только для Avanpost FAM (СИА).

Путь до файла oidc-providers.json задается параметром POLYMATICA_CORE_OIDC_PROVIDERS_CONFIG_PATH в /srv/platform/docker-compose.yml (для Docker-установки) и /etc/polymatica/platform/manager/config.json (для пакетной установки).


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

Пример конфигурации


[    
    {
        "auth_method_active": true,
        "provider_issuer": "https://avanpost.example.ru/auth/realms/docs-realm",
        "provider_redirect_url": "https://polymatica.example.ru/auth/oidc-callback",
        "provider_client_id": "polymatica",
        "provider_client_secret": "jmMEby8L9Jo0TNweolgSiLaXR4AEGNna",
        "provider_scope": "openid profile email",
        "provider_name": "Avanpost"
        "provider_claims": {
            "preferred_username_key": "preferred_username",
            "email_key": "email",
            "first_name_key": "firstName",
            "middle_name_key": "middleName",
            "last_name_key": "lastName",
            "group_key": "sia_groups",
            "role_key": "sia_role"
        },
        "provider_groups_whitelist": "group1,group2,group3"
    }
]


После внесения изменений в файл конфигурации необходимо перезапустить Polymatica Dashboards.



Настройка названия вкладки в окне авторизации для входа через СИА

Вкладку "Open ID" в окне авторизации можно переименовать в "СИА". Для этого необходимо создать тему оформления системы (или отредактировать существующую пользовательскую тему системы), добавив следующий код JavaScript:

const observeUrlChange = () => {                                                                                                                                                  
    const body = document.querySelector('body');                                                                                                                                    
    let lastText = '';                                                                                                              
                                                                                                                                                                                    
    const observer = new MutationObserver(() => {                                                                                                                                   
      if (document.location.href.includes('auth')) {                                                                                                                                
        const tab = document.querySelector('sl-tab[panel="openIDConnect"]');                                                                                                        
                                                                                                                                                                                    
        if (tab) {                                                                                                                                                                  
          const currentText = tab.textContent.trim();                                                                                                                               
                                                                                                            
          if (currentText !== 'СИА' && lastText !== 'СИА') {                                                                                                                        
            tab.textContent = 'СИА';                                                                                                                                                
            lastText = 'СИА';                                                                                                                                                       
          }                                                                                                                                                                         
        }                                                                                                                                                                           
      } else {                                                                                                                                                                      
                                                                                                                  
        lastText = '';                                                                                                                                                              
      }                                                                                                                                                                             
    });                                                                                                                                                                             
                                                                                                                                                                                    
    observer.observe(body, { childList: true, subtree: true });                                                                                                                     
  };                                                                                                                                                                                
                                                                                                                                                                                    
  window.onload = observeUrlChange;

Сохраните тему и примените ее. В окне авторизации появится вкладка "СИА", при нажатии на которую будет выполняться автоматическая переадресация в СИА (Avanpost FAM).


О создании и применении тем см. Polymatica Dashboards - Руководство пользователя - "Настройки системы" - "Оформление".