Конфигурация 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
Получить и отредактировать файл для создания приложения с стороны IDP.
Открыть веб-интерфейс Keycloack и перейти в — Clients → Import client:

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

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

Рекомендуем указывать username или email, в зависимости от выбранного значения логин пользователя в Пассворке может иметь следующие форматы:
- username
Перейти и создать общий набор настроек для приложения (SP) — Client scopes → Create client scope:

Выполнить следующие действия:
- Задать имя;
- Type — Default;
- Protocol — SAML.

Открыть вкладку Mappers и создать утверждение атрибутов для передачи дополнительных атрибутов пользователя из Keycloak (IDP) в Пассворк (SP):
- Добавление утверждения для передачи email:
- Add predefined mapper → X500 email;
- Открыть добавленное утверждение из шаблона и изменить:
- SAML Attribute Name — email;
- SAML Attribute NameFormat — Basic.
- Добавление утверждения для передачи firstName:
- Add mapper → From predefined mappers → X500 surname;
- Открыть добавленное утверждение из шаблона и изменить:
- Property — firstName;
- SAML Attribute Name — firstName;
- SAML Attribute NameFormat — Basic.

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

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

Авторизоваться в веб-интерфейсе Пассворка, перейти в — Настройки и пользователи → Настройки SSO и заполнить атрибуты сопоставления:
- Атрибут электронной почты — email;
- Атрибут полного имени — firstName.
Открыть конфигурацию поставщика услуг (IDP) — Realm settings → General → Endpoints:

Скопировать следующие значения параметров:
Открыть — Настройки и пользователи → Настройки SSO и заполнить значения:
- Идентификатор (Entity ID) — https://keycloack.passwork.local/realms/master
- Url-адрес входа — https://keycloack.passwork.local/realms/master/protocol/saml
- Url-адрес выхода — https://keycloack.passwork.local/realms/master/protocol/saml
Открыть и скопировать сгенерированный SSL сертификат в base64 формате — Realm settings → Keys → Certificate:

Скопированный SSL сертификат поместить в соответствующее поле — Настройки и пользователи → Настройки SSO.
Открыть окно авторизации в веб-интерфейсе Пассворка и выполнить вход через SSO для проверки корректной настройки:

В случае возникновения ошибок, они будут помещены в лог PHP
Ответ от SSO не может быть корректно расшифрован, так как неправильно скопирован отпечаток сертификата или это отпечаток неверного сертификата:
Неправильно указано текущее значение хоста в параметре APP_URL файла config.env:
У пользователя отсутствует атрибут, по которому выполняется вход: