Перейти к основному содержимому
Версия: 7.0

Конфигурация SSO c Keycloak

осторожно

Перед настройкой SSO убедитесь, что в config.env параметр APP_URL соответствует текущему домену Пассворка, пример — APP_URL=https://passwork.example.com

Это нужно, чтобы IDP смог скачать metadata. Также сервер Пассворка должен работать по HTTPS протоколу.

Для примера используются следующие имена серверов:

  • Провайдер (IDP) — keycloack.passwork.local
  • Сервер Пассворка (SP) — passwork.example.com

Создание приложения с помощью импорта файла в Keycloack

Получить и отредактировать файл для создания приложения с стороны IDP.

keycloack.json

Ваш браузер не поддерживает просмотр JSON

Открыть в новой вкладке

"clientId": "https://your_host/api/v1/sso/metadata",
"adminUrl": "https://your_host/api/v1/sso/acs",
"baseUrl": "https://your_host/*",
"saml.logout.url": "https://your_host/api/v1/sso/sls"

Открыть веб-интерфейс Keycloack и перейти в — ClientsImport client:

Импорт .json файла для создания приложения в KeyCloack

Выполнить следующие действия:

  • Импортировать изменённый файл приложения;
  • Задать имя создаваемого приложения;
  • Отключить — Encrypt assertions;
  • Отключить — Client signature required.

Сохранить внесённые изменения:

Выбрать файл и отредактировать импортированный .json

При необходимости можно изменить уникальный идентификатор пользователя (NameID) внутри SAML-assertion после сохранения предыдущих действий:

Пример изменения NameID в SAML-assertion
осторожно

Рекомендуем указывать username или email, в зависимости от выбранного значения логин пользователя в Пассворке может иметь следующие форматы:

Настройка передачи ролей пользователя в SAML-assertion

Перейти и создать общий набор настроек для приложения (SP) — Client scopesCreate client scope:

Создать шаблон настроек для приложения

Выполнить следующие действия:

  • Задать имя;
  • Type — Default;
  • Protocol — SAML.
Отредактировать параметры созданн�ого шаблона

Открыть вкладку Mappers и создать утверждение атрибутов для передачи дополнительных атрибутов пользователя из Keycloak (IDP) в Пассворк (SP):

  • Добавление утверждения для передачи email:
    • Add predefined mapperX500 email;
    • Открыть добавленное утверждение из шаблона и изменить:
      • SAML Attribute Name — email;
      • SAML Attribute NameFormat — Basic.
  • Добавление утверждения для передачи firstName:
    • Add mapperFrom predefined mappersX500 surname;
    • Открыть добавленное утверждение из шаблона и изменить:
      • Property — firstName;
      • SAML Attribute Name — firstName;
      • SAML Attribute NameFormat — Basic.
Добавить в шаблон отдаваемые атрибуты пользователя

Назначить на созданное приложение (SP) созданный набор настроек (Client scope) — ClientsПассворк → перейти на вкладку Client scopesAdd client scope:

Добавить в приложение Пассворка шаблон

Выбрать из списка созданный набор passwork_client_scope с Assigned type — Default:

Выбрать созданный шаблон и добавить в Default режиме

Удалить добавленный по умолчанию шаблон настроек — role_list:

Удаление шаблона по умолчанию

Настройка и заполнение параметров единого входа (SSO) в Пассворке

Заполнение значений «Атрибуты пользователя»

Авторизоваться в веб-интерфейсе Пассворка, перейти в — Настройки и пользователиНастройки SSO и заполнить атрибуты сопоставления:

  • Атрибут электронной почты — email;
  • Атрибут полного имени — firstName.

Заполнение значений «Поставщик удостоверений → Пассворк»

Открыть конфигурацию поставщика услуг (IDP) — Realm settingsGeneralEndpoints:

Перейти в расположение для открытия м�етаданных KeyCloack

Скопировать следующие значения параметров:

entityID="https://keycloack.passwork.local/realms/master"
<md:SingleLogoutService Location="https://keycloack.passwork.local/realms/master/protocol/saml"/>
<md:SingleSignOnService Location="https://keycloack.passwork.local/realms/master/protocol/saml"/>
Пример xml вывода
Пример xml вывода

Открыть — Настройки и пользователиНастройки SSO и заполнить значения:

Заполнение значения «Сертификат»

Открыть и скопировать сгенерированный SSL сертификат в base64 формате — Realm settingsKeysCertificate:

Получить в base64 публичный SSL сертификат KeyCloack

Скопированный SSL сертификат поместить в соответствующее поле — Настройки и пользователиНастройки SSO.

Открыть окно авторизации в веб-интерфейсе Пассворка и выполнить вход через SSO для проверки корректной настройки:

Выполнить аутентификацию в Пассворке с помощью SSO

Возможные ошибки

к сведению

В случае возникновения ошибок, они будут расположены в PHP лог-файле

Ответ от SSO не может быть корректно расшифрован, так как неправильно скопирован отпечаток сертификата или это отпечаток неверного сертификата:

OneLogin_Saml2_Error: invalid_response LastErrorReason: Signature validation failed. SAML Response rejected in /var/www/app/modules/Admin/SSO/SsoController.php:78\nStack trace:\n#0 [internal function]: Passwork\\Modules\\Admin\\SSO\\SsoController->acsAction()\n#1 [internal function]: Phalcon\\Dispatcher\\AbstractDispatcher->callActionMethod()\n#2 [internal function]:Phalcon\\Dispatcher\\AbstractDispatcher->dispatch()\n#3 /var/www/public/index.php(91): Phalcon\\Mvc\\Application->handle()\n#4 {main}

Неправильно указано текущее значение хоста в параметре APP_URL файла config.env:

OneLogin_Saml2_Error: Invalid array settings: sp_acs_url_invalid, sp_sls_url_invalid in /var/www/app/vendors/php-saml/lib/Saml2/Settings.php:122\nStack trace:\n#0 /var/www/app/vendors/php-saml/lib/Saml2/Auth.php(152): OneLogin_Saml2_Settings->__construct()\n#1 /var/www/app/modules/Admin/SSO/SsoService.php(53): OneLogin_Saml2_Auth->__construct()\n#2 /var/www/app/modules/Admin/SSO/SsoController.php(33): Passwork\\Modules\\Admin\\SSO\\SsoService->getAuth()\n#3 [internal function]: Passwork\\Modules\\Admin\\SSO\\SsoController->loginAction()\n#4 [internal function]: Phalcon\\Dispatcher\\AbstractDispatcher->callActionMethod()\n#5 [internal function]: Phalcon\\Dispatcher\\AbstractDispatcher->dispatch()\n#6 /var/www/public/index.php(91): Phalcon\\Mvc\\Application->handle()\n#7 {main}, referer: 

У пользователя отсутствует атрибут, по которому выполняется вход:

OneLogin_Saml2_Error: invalid_response LastErrorReason: The status code of the Response was not Success,was Responder -> urn:oasis:names:tc:SAML:2.0:status:InvalidNameIDPolicy in /var/www/app/modules/Admin/SSO/SsoController.php:78\nStack trace:\n#0 [internal function]:Passwork\\Modules\\Admin\\SSO\\SsoController->acsAction()\n#1 [internal function]: Phalcon\\Dispatcher\\AbstractDispatcher->callActionMethod()\n#2 [internal function]:Phalcon\\Dispatcher\\AbstractDispatcher->dispatch()\n#3 /var/www/public/index.php(91): Phalcon\\Mvc\\Application->handle()\n#4 {main}