Интеграция с Keycloak SSO (SAML)

Статья по теме (основные моменты и описание параметров здесь):


Внимание! В данной статье приведены базовые настройки для конфигурации Keycloak.

Предполагается, что Keycloak уже установлен и сконфигурирован.

Для тестирования использовалась версия Keycloak: 26.0.8



Настройка интеграции HelpDeskEddy и Keycloak

1. Для подключения интеграции с Keycloak необходимо перейти в раздел "Управление" -> "Безопасность/Авторизация" -> "Единый вход в систему (SSO)" и нажать кнопку "Добавить SSO соединение" > "SAML"

 

2. Переходим в Keycloak и создаём новый realm

 

Вводим название realm'а и оставляем его включенным ("Enabled" = On)

 

3. После создания realm'а необходимо его выбрать в качестве текущего

 

4. Теперь необходимо создать клиента для realm'a. Для этого перейдите на вкладку "Clients" и нажмите кнопку "Create client"

 

В окне создания клиента необходимо заполнить поля:
Client type = SAML
Client ID = Audience (EntityID) из настроек HelpDeskedy

 

После ввода данных нажимаем кнопку "Next" и оказываемся на экране "Login settings".
Для базовой настройки нам необходимо только поле "Valid redirect URIs" - в него мы вставляем адрес Assertion consumer service (ACS) из настроек Helpdeskeddy.

Сохраняем настройки.
 

5. После ввода базовых данных и сохранения мы окажемся на странице настройки realm'a, на вкладке "Settings"
Необходимо промотать страницу ниже до блока "SAML capabilities" - и изменить Name ID format на email

Сохраняем настройки.

 

6. Для настройки логаута необходимо перейти на вкладку "Advanced"
Заполняем поле "Logout Service POST Binding URL" - в него мы вставляем адрес Single logout service (SLS) из настроек Helpdeskeddy.

Сохраняем настройки.

 

7. Далее необходимо заполнить блок "Настройки ldP" на стороне HelpdeskEddy.
Для этого в Keycloak переходим на страницу "Realm Settings" и открываем ссылку "SAML 2.0 Identity Provider Metadata"

Вы должны увидеть подобный XML:

[1] - это сертификат, который необходимо вставить в поле "X.509 Certificate" на стороне HelpDeskEddy
Обратите внимание, данный сертификат необходимо скопировать полностью и обернуть в маркеры -----BEGIN CERTIFICATE----- и -----END CERTIFICATE----- (без пробелов между маркерами и самим сертификатом)

 

[2] - это адрес, который необходимо указать в полях "SAML 2.0 Endpoint (HTTP)" и "SLO Endpoint (HTTP)"
Обычно путь выглядит следующим образом: http://домен/realm/название_реалма/protocol/saml

"Issuer URL" - заполняется тем же адресом, но без .../protocol/saml

 



Настройка авторизации по группам

При передаче информации о пользователе система проверяет 3 кастомных атрибута (они являются необязательными, если какой-то из них не заполнен, то также не будет обновлён и у пользователя; кроме группы - если она не указана, то будет указана группа "Клиент" по умолчанию):

group_id - число, ID группы из HDE
organization - строка, название организации из HDE
name - строка, полное имя пользователя из HDE

Рассмотрим настройку атрибутов на примере group_id

1. Для cоздания пользовательского атрибута необходимо открыть "Realm setting" > "User profile", нажимаем "Create atribute"

 

Заполняем поле: "Attribute [Name]" = group_id
И нажимаем "Create"

 

2. Далее необходимо настроить передачу атрибута в токене.
Для этого открываем "Client scopes" и нажимаем "Create client scope"

В открывшемся окне вводим название "group_id" и выбираем "Protocol" = SAML
Сохраняем.

 

После создания необходимо перейти на вкладку "Mappers" и нажать "Configure a new mapper"

 

В открывшемся окне выбираем "User Attribute"

 

В окне настройки mapper'a задаём имя и заполняем:
User Attribute - выбираем group_id, который создавали выше ("Realm setting" > "User profile")
SAML Attribute Name - group_id

 

Далее необходимо привязать новый Client scope к клиенту.
Для этого переходим в "Clients", открываем SAML-клиент и переходим на вкладку "Client scopes". 
Нажимаем "Add client scope".

В открывшемся окне выбираем group_id и добавляем в качестве дефолтного.

 

Теперь при создании пользователя в Keycloak, Вы можете задать ему ID группы из HDE (при авторизации его группа будет изменена на соответствующую):

 



[Ошибка] После ввода логина и пароля - белая страница и ..../acs в URL

Чаще всего данная проблема возникает из-за дупбликации атрибутов
На версии 26.0.8 помогло следующее:

1) Перейти в "Client Scopes", открыть "role_list"

cd68d0ab0423fed3c05bf04f5c070e25c097ce05


2) Перейти на вкладку "Mappers", открыть "role_list"

 

3) Включить параметр "Single Role Attribute" и сохранить настройки

df8213b8e2926d6dd7283f3364833bd150dcd12f

 



[Ошибка] We are sorry... Invalid requester

На версии 26.0.8 помогло отключение параметра "Client signature required" в настройках клиента