Arta Synergy поддерживает технологию Single Sign-On (SSO) по протоколу OpenID Connect. В качестве эталонного сервера аутентификации использовался KeyCloak.
Для входа пользователя, аутентифицированного через OpenID Connect, возможны два варианта:
пользователь, созданный вручную либо через LDAP-синхронизацию, должен присутствовать в Synergy;
пользователь может быть создан автоматически при успешном входе.
В данной инструкции описана настройка Single Sign-On в системе Arta Synergy с пользователями, импортированными из Active Directory.
Конфигурация, настраиваемая в примере:
сервер Active Directory с введённым в его домен клиентским компьютером;
сервер Arta Synergy;
сервер Keycloak;
Установка и настройка Active Directory, а также добавление пользователей описаны в инструкции.
В этом примере в качестве Root domain
name
был введён synchro.tm
. Также нужно создать пользователя,
который будет использоваться для подключения Keycloak к AD и авторизации
через Kerberos (в примере - выделенный пользователь
idp).
У сервера Active Directory должен быть статический IP-адрес.
Для корректной работы SSO через Kerberos сервер аутентификации Keycloak и
сервер Arta Synergy должны иметь DNS-имена. В примере мы используем сервер с
Active Directory в качестве DNS-сервера, в который добавлены серверы
Keycloak и Synergy под именами соответственно idp.synchro.tm
и synergy.synchro.tm
.
На серверах Keycloak и Synergy измените файл /etc/resolv.conf
, первым DNS в нём нужно прописать
IP-адрес сервера Active Directory.
Компьютеры, которые будут использоваться для работы в Synergy, должны быть введены в домен.
В клиентском компьютере нужно также добавить серверы Keycloak и Synergy в зону местной интрасети.
Проверьте, что серверы Keycloak, Synergy, Active Directory и клиентский
компьютер доступны друг другу через ping
.
Важно!
Синхронизируйте время на всех участниках конфигурации, например, с помощью NTP.
Для работы Keycloak требуется установить JDK 8.
Установка, запуск и настройка
Скачайте Keycloak (в данной инструкции использовалась версия keycloak-4.0.0.Beta1).
Распакуйте полученный архив, перейдите в папку 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 следует завести отдельного пользователя и работать под ним.
Зайдите в приложение по адресу http://<host>:<port>/auth
, нажмите
ссылку Administration Console
. Введите
логин admin
, пароль admin
.
Наведите курсор на стрелку возле надписи Master и нажмите кнопку Add realm
, чтобы добавить realm
для вашего приложения Synergy.
Создайте realm
для Synergy.
Добавьте клиента. Для этого нужно нажать пункт Clients
, затем кнопку Create
.
В поле ClientID
введите synergy
, в поле ClientProtocol
выберите openid-connect
, в Root
URL
можно ввести имя, использованное для сервера Keycloak в
DNS. Если оставить это поле незаполненным, страница авторизации Keycloak
будет доступна только по IP. Нажмите Save
.
На открывшейся странице настроек нужно включить флаг Authorization Enabled
. В поле Valid Redirect URIs
добавить все url, с которых
может проходить авторизация, то есть http://<host>:<post>/Synergy/*
,
http://<host>:<post>/Configurator/*
,
http://<host>:<post>/SynergyAdmin/*
.
Добавлять эти 3 url нужно для каждого хоста, через который вы заходите в
Synergy. После настройки нажмите Save
.
Перейдите в настройки SynergyRealm
,
нажмите по кликабельной ссылке OpenID Endpoint
Configuration
.
Откроется следующая вкладка:
В другой вкладке зайдите в Synergy Admin, в разделе Настройки системы
выберите пункт Настройки
аутентификации
. В выпадающем списке Тип аутентификации выберите
OpenId
, в поле ClientId
введите имя ранее созданного
клиента. Скопируйте выделенные на предыдущем изображении эндпоинты в
настройки аутентификации:
authorization_endpoint -> Authorization endpoint
token_endpoint -> Token endpoint
end_session_endpoint -> Logout endpoint
Вернитесь на вкладку Keycloak, откройте пункт меню Clients
и выберите клиента. Перейдите на вкладку
Installation
и выберите пункт Keycloak OIDC JSON
. В появившемся json скопируйте
значение поля secret
и вставьте его в
поле client secret
в настройках
аутентификации Synergy (см. предыдущее изображение).
Выберите способ сопоставления (для Kerberos и SSO в Windows нужно
использовать сопоставление по логину), определите остальные настройки и
нажмите кнопку Сохранить
.
Нажмите User Federation
, выберите в
выпадающем списке Add Provider
пункт
ldap
.
Заполните обязательные поля:
Vendor
- выберите Active Directory
(несколько полей ниже заполнятся автоматически, их можно оставить
неизменными, кроме указанного далее);
Username LDAP attribute
- введите
sAMAccountName
;
Connection URL
- IP-адрес вашего сервера
Active Directory;
Users DN
;
Bind DN
- указать пользователя, через
которого Keycloak подключается к AD (ранее созданный пользователь
idp);
Bind Credential
- пароль этого
пользователя;
Search Scope
- выберите Subtree.
После выполнения указанных настроек нажмите Save
внизу страницы.
Перейдите в соседнюю вкладку Mapper
,
выберите пункт username
. Введите в поле
LDAP Attribute
sAMAccountName
и нажмите Save
.
Перейдите в User Federation
, выберите
созданный ldap
. Импортируйте
пользователей из Active Directory кнопкой Synchronize all users
:
Проверить импорт можно, перейдя в пункт Users
и нажав кнопку View
all users
:
Далее откройте Synergy, должно появиться окно авторизации, как на скриншоте:
Проверьте авторизацию какого-либо импортированного пользователя в
Synergy. Так как ранее в настройках аутентификации был отмечен флаг Добавлять отсутствующих пользователей
,
импортированный из AD пользователь должен авторизоваться в Synergy.
Перейдите на сервер 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
Проверьте текущее состояние SPN для этого пользователя:
setspn -l idp
Скопируйте keytab
-файл на сервер
Keycloak.
В приложении Keycloak перейдите в User
Federation
, выберите ваш ldap
. В разделе Kerberos
Integration
выполните следующие настройки:
где
Kerberos Realm
- FQDN домена Active
Directory заглавными буквами;
Server Principal
- указанный в п. 1
параметр princ
;
Keytab
- путь к скопированному keytab
-файлу.
Сохраните настройки.
Авторизуйтесь под учётной записью пользователя из AD на компьютере из домена AD, откройте браузер и введите адрес вашего экземпляра Synergy. Если настройки выполнены правильно, откроется страница этого пользователя в Synergy без запроса авторизации.
Возможные проблемы и способы их решения
Авторизация не проходит, в логе Keycloak появляется сообщение следующего вида:
INFO [stdout] (default task-79) Clock skew too
great (37)
Решение: проверьте и синхронизируйте время между всеми серверами-участниками конфигурации.
Авторизация не проходит, в логе 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
-файла.
При открытии в браузере Synergy открывается окно авторизации Keycloak.
Решение: добавьте сервер Keycloak в местную интрасеть.
Полезные ссылки
Настройка аутентификации Kerberos с Keycloak и Active Directory