Настройка 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 Ldap providers:
В открывшемся окне заполните следующие поля:
Name: ldapKerberos
Vendor: Active Directory
Connection URL: ldap://your-domain-controller.your-domain.com
Users DN: CN=Users,DC=your-domain,DC=com
Bind type: simple
Bind DN: serviceaccount@YOUR-REALM.COM
Bind Credential: password
Username LDAP attribute: sAMAccountName (не userPrincipalName!)
RDN LDAP attribute: cn
UUID LDAP attribute: objectGUID
User Object Classes: person, organizationalPerson, user
Search scope: subtree
Pagination: ON
Edit Mode: READ_ONLY
Import Users: ON
Sync Registrations: OFF
Настройте Kerberos в LDAP Federation:
В том же окне настройки LDAP перейдите в секцию Kerberos Integration:
Включите Allow Kerberos Authentication.
Заполните следующие поля:
Kerberos Realm: YOUR-REALM.COM
Server Principal: HTTP/keycloak.your-domain.com@YOUR-REALM.COM
Keytab: /etc/krb5.keytab
Debug: ON (для отладки)
Use Kerberos For Password Authentication: ON
Сохраните настройки, нажав Save в нижней части страницы.
Настройте маппинг атрибутов 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
Перейдите в Authentication > Flows:
Создайте копию flow browser (рекомендуется).
Перейдите в разделе browser и найдите Kerberos.
Измените Requirement на 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 мин.
Нужна дополнительная помощь?