Keycloak не может изменять пароли AD

Вопрос или проблема

У меня есть экземпляр Keycloak, который взаимодействует с AD на сервере 2016 через LDAPS. Я проверил, что соединение с сервером работает, что соединение зашифровано и что пользователь Bind в Keycloak может аутентифицироваться.

И ТЕМ НЕ МЕНЕЕ, при попытке изменить пароль я получаю следующую ошибку:
Сообщение об ошибке: Ошибка! Не удалось изменить атрибут для DN [CN=,OU=Team,OU=,DC=,DC=de]

Пользователь Bind в Keycloak имеет ПОЛНЫЙ доступ на запись по всему домену, поэтому я действительно не вижу причин, по которым AD должен отклонять внешний доступ на запись.

Подключившись к серверу через ldapsearch с ldapsearch -x -H ldaps://<DC FQDN>:636 -D "cn=Keycloak-Sync2,ou=SpecialUsers,ou=<компания>,dc=<домен компании>,dc=de" -b "ou=Team,ou=<Компания>,dc=<домен компании>,dc=de" -w "<пароль>", я получаю список всех пользователей в результате.

Я также получаю следующую ошибку в журнале Keycloak:

8:26:53,153 INFO  [org.keycloak.storage.ldap.LDAPIdentityStoreRegistry] (Timer-2) Создание нового LDAP Store для провайдера хранения LDAP: 'ldap', Конфигурация LDAP: {fullSyncPeriod=[86400], pagination=[true], connectionPooling=[false], usersDn=[ou=Team,ou=<имя компании>,dc=<домен компании>,dc=de], cachePolicy=[DEFAULT], useKerberosForPasswordAuthentication=[false], importEnabled=[true], enabled=[true], bindDn=[CN=Keycloak-Sync2,ou=SpecialUsers,ou=<имя компании>,dc=<домен компании>,dc=de], usernameLDAPAttribute=[sAMAccountName], changedSyncPeriod=[900], lastSync=[1734287212], vendor=[ad], uuidLDAPAttribute=[objectGUID], connectionUrl=[ldaps://dc02.<домен компании>.de:636], allowKerberosAuthentication=[false], syncRegistrations=[false], authType=[simple], debug=[false], searchScope=[2], useTruststoreSpi=[ldapsOnly], usePasswordModifyExtendedOp=[true], trustEmail=[true], priority=[0], userObjectClasses=[person, organizationalPerson, user], rdnLDAPAttribute=[sAMAccountName], editMode=[WRITABLE], validatePasswordPolicy=[false], batchSizeForSync=[1000]}, binaryAttributes: []
18:26:53,200 INFO  [org.keycloak.truststore.SSLSocketFactory] (Timer-2) Не найден провайдер хранилища доверенных сертификатов - используется стандартный SSLSocketFactory
18:26:54,022 INFO  [org.keycloak.storage.ldap.LDAPStorageProviderFactory] (Timer-2) Синхронизация федерационного маппера 'role-mapper' завершена. Статус: UserFederationSyncResult [0 импортированных ролей, 67 ролей уже существует в Keycloak]
18:26:54,027 INFO  [org.keycloak.storage.ldap.LDAPStorageProviderFactory] (Timer-2) Синхронизация измененных пользователей из LDAP в локальное хранилище: realm: <ДОМЕН КОМПАНИИ>.DE, провайдер федерации: ldap, время последней синхронизации: Вс Дек 15 18:07:41 GMT 2024
18:26:54,218 INFO  [org.keycloak.storage.ldap.LDAPStorageProviderFactory] (Timer-2) Синхронизация измененных пользователей завершена: 0 импортированных пользователей, 0 обновленных пользователей
18:36:58,665 WARN  [org.keycloak.events] (default task-2) type=LOGIN_ERROR, realmId=master, clientId=null, userId=null, ipAddress=10.42.0.2, error=expired_code, restart_after_timeout=true, authSessionParentId=89cdcdbd-5f32-47a2-9c69-1d83f8eca814, authSessionTabId=g8xANkYl1M0
18:37:04,130 WARN  [org.keycloak.events] (default task-1) type=LOGIN_ERROR, realmId=master, clientId=security-admin-console, userId=null, ipAddress=10.42.0.2, error=user_not_found, auth_method=openid-connect, redirect_uri=https://auth.<домен компании>.de/auth/admin/master/console/, code_id=89cdcdbd-5f32-47a2-9c69-1d83f8eca814, username=<windows username>, authSessionParentId=89cdcdbd-5f32-47a2-9c69-1d83f8eca814, authSessionTabId=g8xANkYl1M0
18:38:30,022 WARN  [org.keycloak.services.resources.admin.UserResource] (default task-3) Не удалось обновить пароль пользователя.: org.keycloak.models.ModelException: Не удалось изменить атрибут для DN [CN=<имя пользователя>,OU=Team,OU=<имя компании>,DC=<домен компании>,DC=de]
...
Caused by: javax.naming.NoPermissionException: [LDAP: error code 50 - 00000005: SecErr: DSID-031A11EF, problem 4003 (INSUFF_ACCESS_RIGHTS), data 0
]; remaining name 'CN=<имя пользователя>,OU=Team,OU=<имя компании>,DC=<домен компании>,DC=de'

Какова может быть причина, по которой AD не позволяет Keycloak изменить пароль пользователя?

Ответ или решение

Проблема, связанная с невозможностью изменения паролей Active Directory (AD) через Keycloak, может иметь несколько причин. Важно рассмотреть все элементы конфигурации и возможность взаимодействия между Keycloak и AD. Исходя из предоставленного описания проблемы, давайте разберем это пошагово.

1. Проверка соединения и настроек LDAP

Первым делом необходимо убедиться, что соединение между Keycloak и AD корректно настроено. Вы упомянули, что проверка шифрования и возможность аутентификации пользователя, указанного в Bind DN, прошла успешно. Однако полезно удостовериться в следующих аспектах:

  • Убедитесь, что в Keycloak правильно установлены все параметры конфигурации LDAP, такие как hostname, port, Bind DN и Base DN. Также проверьте, что все поля в конфигурации (например, userObjectClasses и другие атрибуты) соответствуют тем, что используются в AD.

  • Настройка правильных прав доступа: Даже если указанный Bind пользователь имеет полные права доступа, важно также удостовериться, что заданные права пользователя распространяются на все необходимые объекты. В данном случае, вы получаете ошибку "INSUFF_ACCESS_RIGHTS", что указывает на недостаток прав для выполнения определенной операции.

2. Полномочия и Ошибки доступа

Ошибка, которую вы наблюдаете, указывает на проблему с правами доступа пользователя, используемого для аутентификации:

javax.naming.NoPermissionException: [LDAP: error code 50 - 00000005: SecErr: DSID-031A11EF, problem 4003 (INSUFF_ACCESS_RIGHTS)
  • Проверьте политику паролей в Active Directory: Убедитесь, что политика паролей в вашей AD позволяет изменять пароль через LDAP. Иногда требуется настройка определенных параметров, чтобы разрешить изменение пароля для специфических пользователей или групп.

  • Убедитесь, что пользователь, которому вы назначаете новый пароль, действительно соответствует параметрам, указанным в Keycloak. Возможно, этот пользователь имеет какие-то особые атрибуты, которые требуют контроля при изменении пароля.

3. Исполнение операций по изменению пароля

Для изменения пароля в Active Directory через Keycloak может потребоваться активирование расширенной операции passwordModify. Убедитесь, что данная операция поддерживается вашим сервером AD, и она включена в конфигурации Keycloak.

  • Проверьте настройки расширенных операций: В настройках Keycloak убедитесь, что параметр usePasswordModifyExtendedOp установлен в true.

4. Аудит и Логи

Всегда полезно просмотреть логи, как Keycloak, так и ваш сервер Active Directory. Возможно, дополнительные детали об ошибках могут быть найдены в соответствующих логах, которые могут указать на более специфичные причины проблемы.

  • Проверьте логи Keycloak на предмет дополнительных сообщений об ошибках, которые могут уточнять, почему операции по изменению паролей не проходят.

  • Включите аудит LDAP в AD для отслеживания операций, которые выполняет Keycloak. Это поможет выявить любые аномалии или проблемы с правами при попытке изменения пароля.

Заключение

Проблема с изменением паролей в AD через Keycloak может зависеть от множества факторов, включая настройки прав доступа, конфигурацию LDAP и специфику политики AD. Рекомендуется проверить все перечисленные моменты и, при необходимости, проконсультироваться с администратором Active Directory, чтобы удостовериться в корректности настроек. Таким образом, вы сможете устранить возникшие трудности и обеспечить стабильную работу Keycloak и Active Directory в связке.

Оцените материал
Добавить комментарий

Капча загружается...