Перейти к основному содержимому

Интеграция с 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 конфигурации сервера)
  • Настроить синхронизацию с каталогом пользователей посредством протокола ldap

    • Раздел "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
  • Настроить 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

Настройка 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 #Вкл/вкл интеграция с keycloak
    serverUrl: https://auth.yuchat.company.com #Эндпоинт для доступа в keycloak с сервера
    realm: master #Реалм keycloak с пользователями и конфигурацией
    clientId: yuchat #ClientId для доступа backend в keycloak настроенныый ранее
    clientSecret: "${KC_CLIENT_SECRET}" #Секрет сгенерированный ранее
    sigKeyKid: "${KC_SIG_KEY_SECRET}" #Приватный ключ для подписи токенов сгенерированный ранее
  • Конфигурация синхронизации пользователей

    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 #Требуется ли обновлять описание пользователей при синхронизации