Интеграция с Keycloak
Настройка Keycloak
-
Настроить авторизацию в YuChat через Keycloak
-
Импортировать конфигурацию клиента для возможности авторизации с использованием KC.
Конфигурация: yuchat_web.json
-
На вкладке "General settings" → "Valid redirect URIs", "General settings" → "Valid post logout redirect URIs" https://yuchat.mycompany.com/*
- заменить на эндпоинт вашего сервера YuChat
-
-
Импортировать конфигурацию для возможности авторизации в консоли администратора с использованием KC.
Конфигурация: yuchat-dashboard.json
-
На вкладке "General settings" → "Valid redirect URIs", "General settings" → "Valid post logout redirect URIs" https://admin.yuchat.mycompany.com/*
- заменить на эндпоинт вашего сервера YuChat
-
-
Импортировать конфигурацию сервера для доступа backend YuChat в Keycloak.
Конфигурация: yuchat.json
-
На вкладке "Credentials":
- В разделе "Client Authenticator" установить значение "Client Id and Secret"
- В разделе "Client Secret" сгенерировать секрет и скопировать в конфигурацию backend YuChat (параметр "keycloak.clientSecret")
-
На вкладке "Service accounts roles":
- добавить роли "manage-events" и "manage-users"
-
-
Добавить ключ RSA для шифрования токенов пользователя
- Realm settings → Keys
- Скопировать Kid ключа RS256 (далее будет использоваться для параметра keycloak.sigKeyKid конфигурации сервера)
- Realm settings → Keys
-
-
Настроить ttl для выдаваемых токенов
- Realm settings → Sessions → SSO Session Settings → SSO Session Idle → 5 days
- Realm settings → Sessions → SSO Session Settings → SSO Session Max → 10 days
- Realm settings → Tokens → Access tokens → Access Token Lifespan → 15 min
Срок жизни токенов (время жизни сессии) может быть изменен в соответствии с потребностями на стороне клиента. Например, можно увеличить общий срок жизни токена до 30 дней, таким образом при регулярном использовании приложения пользователю будет необходимо проходить повторную авторизацию только один раз в месяц.
Настройка синхронизации с каталогом пользователей посредством протокола LDAP
Миграция пользователей из LDAP в Keycloak позволяет администратору управлять пользовательскими сессиями, настраивать миграцию пользователей в рабочие пространства а также отдельно от LDAP блокировать пользоватей (закрыть возможность доступа в YuChat)
Для осуществления корректной миграции пользователей, необходимо чтобы у каждого пользователя присутствовал email адрес. В большинстве случаев имя аттрибута в LDAP - mail. Пользователи без email адреса не смогут попасть в YuChat.
- Раздел "User federation" → "Add new provider" → "LDAP"
- В разделе "Connection and authentication settings" настроить параметры подключения по протоколу ldap к вашему каталогу
- В разделе "LDAP searching and updating" → "User DN" указать OU должен быть смигрирован в Keycloak
- В раделе "Advanced settings" → "Trust Email" установить значение в "On"
- На вкладке "Mappers" добавить маппинги для атрибутов пользователей (при необходимости)
- department = Департамент в YuChat
- position = Должность в YuChat
- phone = Номер телефона в YuChat
- displayName = Имя пользователя в YuChat
После настройки синхронизации необходимо убедиться что все пользователи корректно добавляются в Keycloak, это можно проверить запустив принудительную синхронизацию Actions -> Sync All Users
В случае если ADFS существуют пользователи без email адреса, необходимо отфильтровать таких пользователей путем задания фильтра в поле User LDAP filter :
(&(objectClass=user)
(objectCategory=person)
(mail=*)
)
Перед изменением User LDAP filter или других параметров области синхронизации (например User DN) необходимо учитывать последствия. Пользователи, которые перестанут попадать под фильтр LDAP User Federation, могут быть автоматически удалены из Keycloak при следующей синхронизации. Так как YuChat синхронизирует пользователей из Keycloak, такие пользователи будут удалены и из YuChat.
Если в системе используется вход через ADFS, не включайте transparent/browser SSO flow до тех пор, пока все пользователи, которым нужен SSO, не будут смигрированы в Keycloak. Порядок включения такого сценария описан в разделе Настройка SSO через ADFS.
Настройка backend
-
Конфигурационные параметры для настройки подключения клиента к keycloak
yuchat:client:config:supportedAuthTypes: "email,keycloak" #Добавить keycloak чтобы клиенты понимали что авторизация через keycloak доступнаkeycloakUrl: "https://auth.yuchat.company.com" #Эндпоинт keycloak для доступа клиентов (в т.ч. снаружи)keycloakRealm: "master" #Реалм keycloak с пользователями и конфигурациейkeycloakClientId: "yuchat_web" #ClientId настроенныый ранее -
Конфигурационные параметры для настройки подключения сервера к keycloak
keycloak:enabled: true #Вкл/вкл интеграция с keycloakserverUrl: https://auth.yuchat.company.com #Эндпоинт для доступа в keycloak с сервераrealm: master #Реалм keycloak с пользователями и конфигурациейclientId: yuchat #ClientId для доступа backend в keycloak настроенныый ранееclientSecret: "${KC_CLIENT_SECRET}" #Секрет сгенерированный ранееsigKeyKid: "${KC_SIG_KEY_SECRET}" #Приватный ключ для подписи токенов сгенерированный ранее
Настройка синхронизации пользователей
Для настройки автоматической миграции пользователей из LDAP в YuChat с добавлением пользователей в команды небходимо изменить конфигурацию application.yml для сервиса backend.
user:
sync:
enabled: true #Вкл/выкл синхронизация с Keycloak
cron: "*/5 * * * *" #cron-expression расписания синхронизации
lockAtLeastFor: PT3M #системный параметр (не менее минимального времени синхронизации)
lockAtMostFor: PT6M #системный параметр (более максимального времени синхронизации)
defaultMapping: #Дополнительные настройки синхронизации (значения по умолчанию указаны ниже, не обязательно для заполнения)
DEPARTMENT: department #Подразделение
POSITION: position #Должность
PHONE: phone #Телефон
ENTRY_DN: entryDn #Поле в Keycloak, в котором будет содержаться OU LDAP, заданный выше
FULL_NAME: displayName #Поле в KC в котором будет содержаться полное имя пользователя, например Иван Иванович Иванов
orgUnits: #настройка обхектов синхронизации
- workspaceId: "d16wvhMJkm" #Id воркспейса, в который будут добавляться пользователи при синхронизации
ldapOU: "dc=company,dc=com" #Org unit ldap, из которого будут синхронизироваться пользователи
additionalMapping: #Дополнительные настройки синхронизации для переопределения маппинга в рамках отдельных org units (значения по умолчанию указаны ниже, не обязательно для заполнения)
DEPARTMENT: department #Подразделение
POSITION: position #Должность
PHONE: phone #Телефон
ENTRY_DN: entryDn #Поле в Keycloak, в котором будет содержаться OU LDAP, заданный выше
FULL_NAME: displayName #Поле в KC в котором будет содержаться полное имя пользователя, например Иван Иванович Иванов
updateExisted: false #Требуется ли обновлять аттрибуты пользователей при синхронизации в Keycloak