Single Sign-On в Arta Synergy

Arta Synergy поддерживает технологию Single Sign-On (SSO) по протоколу OpenID Connect. В качестве эталонного сервера аутентификации использовался KeyCloak.

Для входа пользователя, аутентифицированного через OpenID Connect, возможны два варианта:

Описание

В данной инструкции описана настройка Single Sign-On в системе Arta Synergy с пользователями, импортированными из Active Directory.

Конфигурация, настраиваемая в примере:

  • сервер Active Directory с введённым в его домен клиентским компьютером;

  • сервер Arta Synergy;

  • сервер Keycloak;

Предварительные настройки

Установка и настройка Active Directory, а также добавление пользователей описаны в инструкции.

В этом примере в качестве Root domain name был введён synchro.tm. Также нужно создать пользователя, который будет использоваться для подключения Keycloak к AD и авторизации через Kerberos (в примере - выделенный пользователь idp).

Рисунок 7.48. Active Directory

Active Directory

У сервера Active Directory должен быть статический IP-адрес.

Рисунок 7.49. Установка статического IP на сервере AD

Установка статического IP на сервере AD

Для корректной работы SSO через Kerberos сервер аутентификации Keycloak и сервер Arta Synergy должны иметь DNS-имена. В примере мы используем сервер с Active Directory в качестве DNS-сервера, в который добавлены серверы Keycloak и Synergy под именами соответственно idp.synchro.tm и synergy.synchro.tm.

Рисунок 7.50. Добавление хостов

Добавление хостов

На серверах Keycloak и Synergy измените файл /etc/resolv.conf, первым DNS в нём нужно прописать IP-адрес сервера Active Directory.

Рисунок 7.51. resolv.conf на серверах Keycloak и Synergy

resolv.conf на серверах Keycloak и Synergy

Компьютеры, которые будут использоваться для работы в Synergy, должны быть введены в домен.

Рисунок 7.52. Свойства компьютера-клиента

Свойства компьютера-клиента

Рисунок 7.53. Компьютер, добавленный в домен

Компьютер, добавленный в домен

В клиентском компьютере нужно также добавить серверы Keycloak и Synergy в зону местной интрасети.

Рисунок 7.54. Добавление узлов в интрасеть

Добавление узлов в интрасеть

Проверьте, что серверы Keycloak, Synergy, Active Directory и клиентский компьютер доступны друг другу через ping.

Важно!

Синхронизируйте время на всех участниках конфигурации, например, с помощью NTP.

Установка и настройка Keycloak

Для работы Keycloak требуется установить JDK 8.

Установка, запуск и настройка

  1. Скачайте Keycloak (в данной инструкции использовалась версия keycloak-4.0.0.Beta1).

  2. Распакуйте полученный архив, перейдите в папку bin, затем введите в консоли

./standalone.sh -b 0.0.0.0

Keycloak запустится на порту 8080. Если вы используете Keycloak и Arta Synergy на одном сервере, команда запуска будет выглядеть следующим образом:

./standalone.sh -b 0.0.0.0 -Djboss.socket.binding.port-offset=100

Данная команда запустит сервер Keycloak на всех интерфейсах на порту 8180. Если требуется изменить порт, это можно сделать в конфигурационном файле standalone.xml.

Примечание: использовать Keycloak и Synergy на одном сервере в продакшне не рекомендуется. Кроме того, для сервиса Keycloak следует завести отдельного пользователя и работать под ним.

  1. Зайдите в приложение по адресу http://<host>:<port>/auth, нажмите ссылку Administration Console. Введите логин admin, пароль admin.

  2. Наведите курсор на стрелку возле надписи Master и нажмите кнопку Add realm, чтобы добавить realm для вашего приложения Synergy.

Рисунок 7.55. Add Realm

Add Realm

  1. Создайте realm для Synergy.

Рисунок 7.56. Synergy Realm

Synergy Realm

  1. Добавьте клиента. Для этого нужно нажать пункт Clients, затем кнопку Create.

Рисунок 7.57. Clients

Clients

  1. В поле ClientID введите synergy, в поле ClientProtocol выберите openid-connect, в Root URL можно ввести имя, использованное для сервера Keycloak в DNS. Если оставить это поле незаполненным, страница авторизации Keycloak будет доступна только по IP. Нажмите Save.

Рисунок 7.58. Add Client

Add Client

  1. На открывшейся странице настроек нужно включить флаг Authorization Enabled. В поле Valid Redirect URIs добавить все url, с которых может проходить авторизация, то есть http://<host>:<post>/Synergy/*, http://<host>:<post>/Configurator/*, http://<host>:<post>/SynergyAdmin/*. Добавлять эти 3 url нужно для каждого хоста, через который вы заходите в Synergy. После настройки нажмите Save.

Рисунок 7.59. Valid Redirect URIs

Valid Redirect URIs

  1. Перейдите в настройки SynergyRealm, нажмите по кликабельной ссылке OpenID Endpoint Configuration.

Рисунок 7.60. OpenID Endpoint Configuration

OpenID Endpoint Configuration

Откроется следующая вкладка:

Рисунок 7.61. Endpoints

Endpoints

  1. В другой вкладке зайдите в Synergy Admin, в разделе Настройки системы выберите пункт Настройки аутентификации. В выпадающем списке Тип аутентификации выберите OpenId, в поле ClientId введите имя ранее созданного клиента. Скопируйте выделенные на предыдущем изображении эндпоинты в настройки аутентификации:

  • authorization_endpoint -> Authorization endpoint

  • token_endpoint -> Token endpoint

  • end_session_endpoint -> Logout endpoint

Рисунок 7.62. Настройки аутентификации

Настройки аутентификации

  1. Вернитесь на вкладку Keycloak, откройте пункт меню Clients и выберите клиента. Перейдите на вкладку Installation и выберите пункт Keycloak OIDC JSON. В появившемся json скопируйте значение поля secret и вставьте его в поле client secret в настройках аутентификации Synergy (см. предыдущее изображение).

Рисунок 7.63. Поле secret

Поле secret

  1. Выберите способ сопоставления (для Kerberos и SSO в Windows нужно использовать сопоставление по логину), определите остальные настройки и нажмите кнопку Сохранить.

Настройка импорта пользователей из Active Directory

  1. Нажмите User Federation, выберите в выпадающем списке Add Provider пункт ldap.

Рисунок 7.64. User Federation

User Federation

Заполните обязательные поля:

  • Vendor - выберите Active Directory (несколько полей ниже заполнятся автоматически, их можно оставить неизменными, кроме указанного далее);

  • Username LDAP attribute - введите sAMAccountName;

  • Connection URL - IP-адрес вашего сервера Active Directory;

  • Users DN;

  • Bind DN - указать пользователя, через которого Keycloak подключается к AD (ранее созданный пользователь idp);

  • Bind Credential - пароль этого пользователя;

  • Search Scope - выберите Subtree.

Рисунок 7.65. Настройка LDAP

Настройка LDAP

После выполнения указанных настроек нажмите Save внизу страницы.

  1. Перейдите в соседнюю вкладку Mapper, выберите пункт username. Введите в поле LDAP Attribute sAMAccountName и нажмите Save.

Рисунок 7.66. Редактирование username в Mapper

Редактирование username в Mapper

  1. Перейдите в User Federation, выберите созданный ldap. Импортируйте пользователей из Active Directory кнопкой Synchronize all users:

Рисунок 7.67. Синхронизация пользователей

Синхронизация пользователей

Проверить импорт можно, перейдя в пункт Users и нажав кнопку View all users:

Рисунок 7.68. Просмотр пользователей

Просмотр пользователей

  1. Далее откройте Synergy, должно появиться окно авторизации, как на скриншоте:

Рисунок 7.69. Страница авторизации Synergy с подключенным Keycloak

Страница авторизации Synergy с подключенным Keycloak

Проверьте авторизацию какого-либо импортированного пользователя в Synergy. Так как ранее в настройках аутентификации был отмечен флаг Добавлять отсутствующих пользователей, импортированный из AD пользователь должен авторизоваться в Synergy.

Настройка авторизации с Kerberos

  1. Перейдите на сервер Active Directory и выполните в консоли команду ktpass для создания keytab-файла. Команда содержит следующие параметры:

ktpass -out {полный путь к создаваемому keytab-файлу} -princ {тип службы}/{FQDN имя узла службы}@{FQDN домена в верхнем регистре} -mapUser {имя сервисного пользователя AD} -pass {пароль сервисного пользователя AD} -kvno 0 -ptype KRB5_NT_PRINCIPAL -crypto RC4-HMAC-NT

Для рассматриваемого примера использовалась команда (в качестве сервисного пользователя указан ранее созданный пользователь idp):

ktpass -out keycloak.keytab -princ HTTP/idp.synchro.tm@SYNCHRO.TM -mapUser idp@SYNCHRO.TM -pass Password123 -kvno 0 -ptype KRB5_NT_PRINCIPAL -crypto RC4-HMAC-NT

  1. Проверьте текущее состояние SPN для этого пользователя:

setspn -l idp

  1. Скопируйте keytab-файл на сервер Keycloak.

  2. В приложении Keycloak перейдите в User Federation, выберите ваш ldap. В разделе Kerberos Integration выполните следующие настройки:

Рисунок 7.70. Настройка Kerberos

Настройка Kerberos

где

  • Kerberos Realm - FQDN домена Active Directory заглавными буквами;

  • Server Principal - указанный в п. 1 параметр princ;

  • Keytab - путь к скопированному keytab-файлу.

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

Авторизуйтесь под учётной записью пользователя из AD на компьютере из домена AD, откройте браузер и введите адрес вашего экземпляра Synergy. Если настройки выполнены правильно, откроется страница этого пользователя в Synergy без запроса авторизации.

Возможные проблемы и способы их решения

  1. Авторизация не проходит, в логе Keycloak появляется сообщение следующего вида:

INFO [stdout] (default task-79) Clock skew too great (37)

Решение: проверьте и синхронизируйте время между всеми серверами-участниками конфигурации.

  1. Авторизация не проходит, в логе Keycloak появляется сообщение следующего вида:

WARN [org.keycloak.federation.kerberos.impl.SPNEGOAuthenticator] (default task-84) SPNEGO login failed: java.security.PrivilegedActionException: GSSException: Defective token detected (Mechanism level: GSSHeader did not find the right tag)

Решение: проверьте, что для авторизации в Keycloak (см. Server Principal в разделе Kerberos Integration настроек LDAP) используется тот же пользователь, который указан в Kerberos Principal при создании keytab-файла.

  1. При открытии в браузере Synergy открывается окно авторизации Keycloak.

Решение: добавьте сервер Keycloak в местную интрасеть.

Полезные ссылки

Изменение IP на сервере

Ввод компьютер в домен

Настройка LDAP/AD в Keycloak

Настройка аутентификации Kerberos с Keycloak и Active Directory