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