Настройка SSO-аутентификации
Назначение документа
В документе описан порядок действий для настройки SSO как с использованием сервиса Keycloak, так и без него. По завершении интеграции пользователи получат возможность проходить SSO-аутентификацию внутри Почты VK WorkSpace.
SSO (Single Sign-On) — технология, позволяющая проходить при авторизации процесс аутентификации один раз и автоматически получать доступ к нескольким системам без повторного ввода учетных данных.
Предварительные условия
Чтобы начать настройку, вам потребуется:
- Доступ на сервер Почты и в административную панель VK WorkSpace;
- Доступ к Active Directory;
- Пользователь Active Directory с правами администратора;
- Доступ в Keycloak (для интеграций с внешним сервером);
- Навыки системного администрирования (Linux, Windows).
Настройки на сервере Active Directory
На контролере домена необходимо зарегистрировать учетную запись.
В разделе Account ввести в поле User logon name следующее:
- Для интеграции с Keycloak —
HTTP/<почтовый домен>
; - Для интеграции без Keycloak —
HTTP/auth.<почтовый домен>
.
В окне Account options внутри того же раздела отметьте чекбосы:
- User cannot change password;
- Password never expires;
- This account supports Kerberos AES 128 bit encryption;
- This account supports Kerberos AES 256 bit encryption;
- Do not require Kerberos preauthentication.
Затем в разделе управления групповыми политиками перейдите к настройке политики Configure encryption types allowed for Kerberos (настройка актуальна как для работы с Keycloak, так и без него).
Во вкладке Security Policy Setting отметьте следующие политики:
- RC4_HMAC_MD5,
- AES128_HMAC_SHA1,
- AES256_HMAC_SHA1.
Сгенерируйте keytab-файлы
Команды, которые представлены ниже, необходимо выполнять на сервере Active Directory.
Пример команды, чтобы создать keytab для WEB (интеграция с Keycloak):
ktpass -princ HTTP/infra-01.dev.onprem.ru@AD2013.ON-PREMISE.RU -mapuser AD2013\kcuser3 -out C:\tmp\keycloak.keytab -mapOp set -crypto ALL -setupn -setpass -ptype KRB5_NT_PRINCIPAL /pass strongSecret
Сохраните созданный keytab-файл для HTTP на почтовом сервере.
Пример команд, чтобы создать keytab для WEB (интеграция без Keycloak):
ktpass -princ HTTP/auth.infra-01.dev.onprem.ru@AD2013.ON-PREMISE.RU -mapuser "<username>@ad2013.on-premise.ru" -crypto AES256-SHA1 -ptype KRB5_NT_PRINCIPAL -pass "<userpass>" +dumpsalt -out C:\Users\Admin\Documents\keytabs_sso\http.keytab
ktpass -princ "HTTP/infra-01.dev.onprem.ru@AD2013.ON-PREMISE.RU" -mapuser "<username>@ad2013.on-premise.ru" -crypto AES256-SHA1 -ptype KRB5_NT_PRINCIPAL -pass "<userpass>" -in C:\Users\Admin\Documents\keytabs_sso\http.keytab -out C:\Users\Admin\Documents\keytabs_sso\httpq.keytab -setupn -setpass -rawsalt "<Hashing password with salt из вывода прошлой команды>"
Параметры команды ktpass
:
-
princ
— имя SPN в Keycloak для идентификации в среде Kerberos.Имя состоит из: транспортного протокола (для HTTP в верхнем регистре); имени хоста сервера Keycloak (или адреса почтового сервера для интеграций внутри инсталляции); Kerberos Realm (для HTTP в верхнем регистре).
-
mapuser
– имя созданной в домене учетной записи для сервера Keycloak (DOMAIN\username). mapOp
– если задано значение add, то новый SPN будет добавлен к существующим. Если задано значение set, то SPN будет перезаписан.out
– задает путь к генерируемому keytab-файлу. Например, C:\temp\spnego_spn.keytab./pass
– значение пароля от учетной записи для сервера Keycloak в домене.- параметры
crypto
иptype
задают ограничения на используемые алгоритмы и тип генерируемой Kerberos-службы. Рекомендуется задать параметры, как в указанном примере:-crypto ALL -ptype KRB5_NT_PRINCIPAL
. - параметр -setupn необходим для того, чтобы UPN не менялся.
Внимание
Отдельно сохраните значение SPN (Service Principal Name) из команды выше, оно потребуется вам позднее.
Чтобы сгенерировать keytab-файлы для SMTP и IMAP, используйте следующие команды (актуальны как для работы с Keycloak, так и без него):
dsquery * -filter sAMAccountName=kcuser3 -attr msDS-KeyVersionNumber
# В следующих командах /kvno <N> – результат выполнения первой команды
ktpass -princ smtp/infra-01.dev.onprem.ru@AD2013.ON-PREMISE.RU -mapuser AD2013\kcuser3 -out C:\tmp\infra_smtp.keytab -mapOp add -crypto ALL -setupn -setpass -ptype KRB5_NT_PRINCIPAL /kvno <N> /pass strongSecret
ktpass -princ imap/infra-01.dev.onprem.ru@AD2013.ON-PREMISE.RU -mapuser AD2013\kcuser3 -out C:\tmp\infra_imap.keytab -mapOp add -crypto ALL -setupn -setpass -ptype KRB5_NT_PRINCIPAL /kvno <N> /pass strongSecret
Два файла .keytab для IMAP и SMTP нужно также сохранить на сервере Почты. В дальнейшем их нужно будет добавить в установщик.
Настройка интеграции с Active Directory
- Авторизуйтесь в Admin Panel сервиса Почта под учетной записью администратора.
- Выберите адрес сервера, для которого нужно настроить интеграцию с Keycloak. У выбранного домена должна быть настроена MX-запись.
- Перейдите в раздел Конфигурация -> Настройки панели администратора.
-
Чтобы начать настройку, уберите чекбокс Не использовать AD.
-
Введите в поле Адрес AD адрес вашего каталога Active Directory.
-
Каталоги пользователей — введите значение поля distinguishedName из списка атрибутов каталога. Например,
OU=demoapp.DC=presale.DC=local
.Если вам нужно указать больше одного каталога пользователей, обратитесь к представителю VK.
-
Введите в поле Логин администратора логин администратора Active Directory.
-
Вставьте в поле Пароль администратора пароль администратора Active Directory.
-
Если вы используете свойство Отчество, введите его значение в Поле свойства «Отчество».
-
Использовать шифрованное соединение (LDAPS) — есть возможность добавления сертификата LDAPS с помощью кнопки Добавить сертификат.
-
Отметьте чекбокс Игнорировать ошибки сертификата, если у вас самоподписанный SSL-сертификат.
Сбрасывать сессии пользователей при изменении пароля — если чекбокс отмечен, при изменении пароля пользователя в Active Directory будет сбрасываться сессия в Почте.
Использовать в качестве логина email вместо username — в текущей версии поле не используется.
-
Нажмите на кнопку Сохранить, чтобы применить настройки.
Если пользователи не появились в Почте, нужно проверить корректность настроек синхронизации с Active Directory с помощью консольной команды:
Проверка настроек домена
Если вы не планируете использовать Keycloak, перейдите к настройке Deployer.
Далее необходимо проверить файл настроек домена, для которого будет настраиваться интеграция с Keycloak.
-
Перейдите по URL административной панели
https://biz.<domain_name>/admin/misc/configurations/adloaderclient/
и кликните по адресу домена. -
Убедитесь, что в разделе options отсутствует значение
proxyAddresses
. -
Если значение
proxyAddresses
присутствует, необходимо удалить его, включая скобки:(proxyAddresses=smtp:sink.mail1@exch.on-premise.ru)
. -
Сохраните изменения.
Настройка установщика
Для перехода в веб-интерфейс в адресной строке браузера необходимо указать адрес: http://server-ip-address:8888
. Нажмите на значок и перейдите в раздел Продукты.
Для работы с Keycloak
-
Включите опции Интеграция с Kerberos (SSO-авторизация) и Keycloak внутри инсталляции.
Если вы планируете использовать внешний сервис Keycloak, нужно включить опцию Интеграция с внешним Keycloak сервером.
-
Сохраните изменения и вернитесь к списку ролей, чтобы сгенерировать дополнительные контейнеры.
-
В настройках перейдите в раздел Интеграции -> Интеграция с Kerberos (SSO-авторизация).
-
Введите заглавными буквами адрес сервера Active Directory, который будет использоваться в интеграции, в поле Название REALM`а в Keycloak.
В поле можно также ввести любое ключевое название, например KEYCLOAKREALM. Позже это значение будет использоваться при настройках в интерфейсе Keycloak. REALM в установщике не должен совпадать с Kerberos REALM, у них разное назначение.
-
Сохраните изменения.
-
Если установщик выдаст ошибку, попробуйте сохранить еще раз.
-
Прежде чем перейти в интерфейс Keycloak, на сервере с дистибутивом Почты выполните команду:
Для работы без Keycloak
-
Включите опции Интеграция с Kerberos (SSO-авторизация).
-
Сохраните изменения и вернитесь к списку ролей, чтобы сгенерировать дополнительные контейнеры.
-
Затем в Настройках перейдите в раздел Интеграции -> Интеграция с Kerberos (SSO-авторизация).
-
Заполните поля:
-
Адрес системы аутентификации Kerberos — адрес сервера, на котором установлен AD/Kerberos и порт 88.
-
Адрес сервера Kerberos-adm (Kerberos administration) — адрес сервера, на котором установлена административная панель Kerberos и порт 749.
-
Имя REALM в Kerberos — заглавными буквами введите имя REALM (чаще всего оно совпадает с адресом сервера AD/Kerberos).
-
Адрес сервера SPN (Service Principal Name).
-
-
Добавьте keytab-файлы в соответствующие поля и сохраните изменения.
-
Чтобы применить новую конфигурацию перейдите к списку ролей и повторите соответствующие шаги или запустите автоматическую установку.
На этом интеграцию с Kerberos без Keycloak можно считать завершенной.
Настройки интеграции с Keycloak
Для перехода в Keycloak в строке браузера введите адрес: https://biz.<mail_domain>/auth
.
Если вы используете внешний сервер Keycloak, перейдите в его панель администрирования.
Шаг 1. Создайте и настройте REALM
-
В выпадающем меню нажмите на кнопку Add realm.
-
В поле Name введите имя REALM, аналогичное указанному в интерфейсе установщика.
-
Нажмите на кнопку Create — откроется окно настроек, раздел General.
-
В поле Frontend URL добавьте URL вида:
http://biz.<mail_domain>:80/auth
.Примечание
При использовании внешнего сервера Keycloak нужна дополнительная настройка на
/auth
с помощью параметраhttp-relative-path=/auth
. -
Сохраните изменения.
-
Во вкладке Login у параметра Require SSL необходимо выбрать значение none.
- Сохраните настройки.
-
Перейдите во вкладку Keys -> Providers и удалите неподдерживаемые провайдеры (
aes-generated
иrsa-enc-generated
).
Шаг 2. Добавьте Client API
-
В разделе Clients создайте нового клиента. Для этого в поле Client ID введите значение api и нажмите на кнопку Save.
-
Вкладку Settings нужно настроить следующим образом:
Внимание
Поля, настройки которых не будут изменяться, следует оставить заполненными по умолчанию.
- Access Type — confidential (после изменения типа доступа появятся дополнительные настройки);
- Service Accounts Enabled — ON;
- Authorization Enabled — ON;
- Valid Redirect URIs — * (необходимо ввести в поле символ *);
-
Cохраните изменения.
- Перейдите во вкладку Credentials.
-
Скопируйте или сохраните значение поля Secret.
Шаг 3. Настройте интеграцию с LDAP
-
Перейдите в раздел User Federation и в выпадающем меню Add provider выберите ldap.
-
Внесите данные в соотвествие с настройками LDAP в вашем каталоге Active Directory.
Обратите внимание:
- В строке Username LDAP attribute необходимо указать название поля в Active Directory, в котором содержатся юзернеймы пользователей.
- В поле Bind DN нужно добавить точное местоположение пользователя для синхронизации в каталоге AD.
-
Проверьте соединение с помощью кнопок Test connection и Bind Credential.
Шаг 4. Настройте интеграцию с Kerberos при работе с Keycloak
-
Раскройте вкладку Kerberos Integration и внесите данные для интеграции.
-
Заполните поля:
- Kerberos Realm — введите имя REALM из Kerberos.
- Server Principal — укажите ранее созданный SPN Например,
HTTP/biz.infra-01.dev.onprem.ru@AD2013.ON-PREMISE.ru
. - KeyTab — добавьте в путь до keytab-файла для HTTP.
Менять положение флагов не нужно.
-
Сохраните изменения.
Шаг 5. Добавьте в контейнер Keycloak файла .keytab
Выполните следующую команду на сервере Почты:
Шаг 6. Настройте параметры интеграции с Keycloak в установщике
-
В настройках установщика Почты необходимо перейдите в раздел Интеграции -> Интеграция с keycloak для SSO авторизации.
-
В поле Secret oauth клиента в Keycloak введите код из раздела Clients -> Credentials в Keycloak, который вы сохранили ранее.
-
Добавьте адреса сервисов Kerberos (с портами) и keytab-файлов для IMAP и SMTP.
- Сохраните изменения.
- Чтобы применить изменения перейдите к списку ролей и запустите автоматическую установку.
-
Чтобы в интерфейсе пользователей начала отображаться кнопка Войти через SSO, выполните в контейнере mailapi1 шаг up_container.
-
Проверьте успешность интеграции, войдя в систему через SSO под учетной записью пользователя.