Настройка Keycloak с Kerberos и Active Directory
Предварительные условия
Для успешной настройки необходимы следующие компоненты и версии программного обеспечения:
Keycloak версия 26.0 или более поздняя.
Active Directory (контроллер домена Windows).
Keytab-файл для сервисного принципала Keycloak.
Доступ к DNS для правильного разрешения имён.
Подготовка Keytab-файла
На контроллере домена создайте сервисный принципал для Keycloak:
ktpass -princ HTTP/keycloak.your-domain.com@YOUR-REALM.COM -mapuser serviceaccount@YOUR-REALM.COM -crypto AES256-SHA1 -ptype KRB5_NT_PRINCIPAL -pass password -out keycloak.keytabУбедитесь, что
keytabсодержит современные типы шифрования:ktutil -k keycloak.keytab listРекомендуемые типы шифрования:
aes256-cts-hmac-sha1-96
aes128-cts-hmac-sha1-96
Если в
keytabприсутствуют устаревшие типы шифрования (arcfour-hmac, des-cbc-crc), их следует удалить:ktpass -princ HTTP/keycloak.your-domain.com@YOUR-REALM.COM -mapuser serviceaccount@YOUR-REALM.COM -crypto AES256-SHA1 -ptype KRB5_NT_PRINCIPAL -pass password -out keycloak_aes.keytab
Настройка Docker-контейнера Keycloak
Загрузите файл keycloak_aes.keytab на сервер в любую директорию.
Создайте в папке
/var/lib/visiology/scripts/v3/extended-services/файл с названиемXX-name.yml, гдеХХ– число, с помощью которого вы можете задать порядок обработки yml-файлов, аname– название файла. (например,45-keycloak-krb.yml).Укажите требуемые параметры в созданном файле:
version: "3.8" services: keycloak: volumes: - /var/lib/visiology/certs/krb5.keytab:/etc/krb5.keytab:roГде
/var/lib/visiology/certs– это абсолютный путь к keytab-файлу. Если файл расположен по другому пути, укажите этот путь (к директории, где расположен файл).
Настройка Realm и User Federation в Keycloak
Войдите в консоль администратора в Keycloak:
https://your-domain.com/v3/keycloak/admin/Visiology/consoleНастройте User Federation для LDAP:
Перейдите в User federation в боковой панели, и затем нажмите Add provider:
В открывшемся окне заполните следующие поля:
Наименование в консоли: ldapKerberos
Поставщик: Active Directory
URL соединения: ldap://your-domain-controller.your-domain.com
Пользователи DN: CN=Users,DC=your-domain,DC=com
Тип аутентификации: simple
Сопоставление DN: serviceaccount@YOUR-REALM.COM
Bind Credential: password
Атрибут Username в LDAP: sAMAccountName (не userPrincipalName!)
Атрибут RDN в LDAP: cn
Атрибут UUID в LDAP: objectGUID
Классы объектов пользователя: person, organizationalPerson, user
Поиск области: subtree
Постраничный вывод: ON
Режим редактирования: READ_ONLY
Импортировать пользователей: ON
Sync Registrations: OFF
Настройте Kerberos в LDAP Federation:
В том же окне настройки LDAP перейдите в секцию Интеграция с Kerberos:
Включите Разрешить аутентификацию Kerberos.
Заполните следующие поля:
Kerberos Realm: YOUR-REALM.COM
Основной сервер: HTTP/keycloak.your-domain.com@YOUR-REALM.COM
Key tab: /etc/krb5.keytab
Отладчик: ON (для отладки)
Использовать Kerberos для аутентификации по паролю: ON
Сохраните настройки, нажав Сохранить в нижней части страницы.
Настройте маппинг атрибутов LDAP:
Перейдите в User Federation > ldapKerberos > Mappers.
Создайте/отредактируйте мапперы для основных атрибутов:
username:
Name: username
Mapper Type: user-attribute-ldap-mapper
User Model Attribute: username
LDAP Attribute: sAMAccountName
Read Only: ON
email:
Name: email
User Model Attribute: email
LDAP Attribute: mail
first name:
User Model Attribute: firstName
LDAP Attribute: givenName
last name:
User Model Attribute: lastName
LDAP Attribute: sn
Настройка Authentication Flow
Перейдите в Аутентификация > Сценарии:
Создайте копию сценария browser (рекомендуется).
Перейдите в разделе browser и найдите Kerberos.
Измените Требования на Alternative или Required:
Настройка клиентских рабочих станций (Если Kerberos настраивается в первый раз)
Windows/Edge:
Откройте свойства интернета (inetcpl.cpl):
На вкладке Безопасность:
Выберите Местная интрасеть > Сайты > Дополнительно.
Добавьте:
https://keycloak.your-domain.com
При настройке пользовательского уровня безопасности установите флажок напротив параметра “Автоматический вход только для зоны Интранета”.
Firefox:
В about:config задайте следующее:
network.negotiate-auth.trusted-uris = keycloak.your-domain.com
network.negotiate-auth.delegation-uris = keycloak.your-domain.comChrome:
Запускайте Chrome со следующими параметрами:
--auth-server-whitelist="keycloak.your-domain.com"
--auth-negotiate-delegate-whitelist="keycloak.your-domain.com"Отладка и устранение неполадок
Проверка Keytab-файла
klist -kt /etc/krb5.keytabПроверка Kerberos-аутентификации вручную
kinit username@YOUR-REALM.COM
klistПросмотр логов Keycloak
docker logs <keycloak_container_id> -fТипичные проблемы и решения
Неподдерживаемый тип шифрования
Используйте современные типы шифрования (AES).
Обновите
krb5.keytab. Он не должен содержать старые методы шифрования (например RC4-HMAC).На контроллере домена настройте только определённые методы шифрования для Kerberos.
Ошибка "Null username"
Используйте
sAMAccountNameвместоuserPrincipalName.Проверьте заполнение LDAP-атрибутов для пользователей.
Проблемы с DNS
Проверьте разрешение имён для всех узлов.
Убедитесь, что SPN корректно зарегистрирован в Active Directory.
Дублирование пользователей
Удалите существующих пользователей.
Проверьте настройки
Import UsersиFederation Link.
Смотрите также
На этой странице
- 1 Предварительные условия
- 2 Подготовка Keytab-файла
- 3 Настройка Docker-контейнера Keycloak
- 4 Настройка Realm и User Federation в Keycloak
- 5 Настройка Authentication Flow
- 6 Настройка клиентских рабочих станций (Если Kerberos настраивается в первый раз)
- 6.1 Windows/Edge:
- 6.2 Firefox:
- 6.3 Chrome:
- 7 Отладка и устранение неполадок
Время чтения: 2 мин.
Нужна дополнительная помощь?