Настройка Keycloak с Kerberos и Active Directory

Настройка Keycloak с Kerberos и Active Directory

Предварительные условия

Для успешной настройки необходимы следующие компоненты и версии программного обеспечения:

  • Keycloak версия 26.0 или более поздняя.

  • Active Directory (контроллер домена Windows).

  • Keytab-файл для сервисного принципала Keycloak.

  • Доступ к DNS для правильного разрешения имён.

Подготовка Keytab-файла

  1. На контроллере домена создайте сервисный принципал для 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
  2. Убедитесь, что keytab содержит современные типы шифрования:

    ktutil -k keycloak.keytab list

    Рекомендуемые типы шифрования:

    • aes256-cts-hmac-sha1-96

    • aes128-cts-hmac-sha1-96

  3. Если в 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

  1. Загрузите файл keycloak_aes.keytab на сервер в любую директорию.

  2. Создайте в папке /var/lib/visiology/scripts/v3/extended-services/ файл с названием
    XX-name.yml, где ХХ – число, с помощью которого вы можете задать порядок обработки yml-файлов, а name – название файла. (например, 45-keycloak-krb.yml).

  3. Укажите требуемые параметры в созданном файле:

    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

  1. Войдите в консоль администратора в Keycloak:
    https://your-domain.com/v3/keycloak/admin/Visiology/console

  2. Настройте User Federation для LDAP:

    • Перейдите в User federation и нажмите Add Ldap providers:

      button.png
  3. В открывшемся окне заполните следующие поля:

    • 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

  4. Настройте Kerberos в LDAP Federation:

    • В том же окне настройки LDAP перейдите в секцию Kerberos Integration:

      section.png
    • Включите 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

  5. Сохраните настройки, нажав Save в нижней части страницы.

  6. Настройте маппинг атрибутов 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

  1. Перейдите в Authentication > Flows:

    flow.png
  2. Создайте копию flow browser (рекомендуется).

  3. Перейдите в разделе browser и найдите Kerberos.

  4. Измените Requirement на Alternative или Required:

    required.png

Настройка клиентских рабочих станций (Если Kerberos настраивается в первый раз)

Windows/Edge:

  1. Откройте свойства интернета (inetcpl.cpl):

    settings.png
  2. На вкладке Безопасность:

    • Выберите Местная интрасеть > Сайты > Дополнительно.

    • Добавьте: https://keycloak.your-domain.com

  3. При настройке пользовательского уровня безопасности установите флажок напротив параметра “Автоматический вход только для зоны Интранета”.

Firefox:

В about:config задайте следующее:

network.negotiate-auth.trusted-uris = keycloak.your-domain.com network.negotiate-auth.delegation-uris = keycloak.your-domain.com

Chrome:

Запускайте 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

Типичные проблемы и решения

  1. Неподдерживаемый тип шифрования

    • Используйте современные типы шифрования (AES).

    • Обновите krb5.keytab. Он не должен содержать старые методы шифрования (например RC4-HMAC).

    • На контроллере домена настройте только определённые методы шифрования для Kerberos.

Данная операция выполняется в "Group Policy Management" (GPMC):

  1. Откройте Group Policy Management (gpmc.msc).

  2. Перейдите в Forest > Domains > Ваш_домен > Domain Controllers.

  3. Щелкните правой кнопкой мыши по Default Domain Controllers Policy и выберите Edit.

  4. В редакторе GPO перейдите в Computer Configuration > Policies > Windows Settings > Security Settings > Local Policies > Security Options.

  5. Найдите следующий параметр:
    Network security: Configure encryption types allowed for Kerberos

  6. Откройте его и оставьте только AES-128 и AES-256, уберите RC4.

  1. Ошибка "Null username"

  • Используйте sAMAccountName вместо userPrincipalName.

  • Проверьте заполнение LDAP-атрибутов для пользователей.

  1. Проблемы с DNS

  • Проверьте разрешение имён для всех узлов.

  • Убедитесь, что SPN корректно зарегистрирован в Active Directory.

  1. Дублирование пользователей

  • Удалите существующих пользователей.

  • Проверьте настройки Import Users и Federation Link.


Смотрите также

Настройка ADFS в KeyCloak