Ошибка подключения к AD через аддон LDAP

Коллеги, доброго дня!

В чистом проекте jmix возникла проблема с аддоном LDAP - не проходит подключение к AD. При логине с AD-шным логином и паролем выдаёт ошибки:

  1. В случае ввода логина в формате имя_пользователя или имя_пользователя@домен.local:
org.springframework.security.core.userdetails.UsernameNotFoundException: User not found
  1. В случае ввода логина в формат домен\имя_пользователя:
org.springframework.security.ldap.authentication.ad.ActiveDirectoryAuthenticationException: [LDAP: error code 49 - 80090308: LdapErr: DSID-0C09041C, comment: AcceptSecurityContext error, data 52e, v4563]

Настройки аддона в файле application.properties:

jmix.ldap.urls = ldap://xxx.xxx.xxx.xxx:389
jmix.ldap.baseDn = DC=company,DC=local
jmix.ldap.activeDirectoryDomain = company.local
jmix.ldap.managerDn = CN=SERVICE APP,OU=Service,OU=Organization,DC=company,DC=local
jmix.ldap.managerPassword = password
jmix.ldap.userSearchFilter = (uid={0})
jmix.ldap.useActiveDirectoryConfiguration = true

С такими же настройками аддона LDAP в приложении CUBA 7.2 всё работает:

ldap.contextSourceUrl = ldap://xxx.xxx.xxx.xxx:389
ldap.contextSourceBase = DC=company,DC=local
ldap.contextSourceUserName = CN=SERVICE APP,OU=Service,OU=Organization,DC=company,DC=local
ldap.contextSourcePassword = password
ldap.referral = follow

Гугление показывает, что ошибка с code 49 data 52e - Returns when username is valid but password/credential is invalid.
Но логин/пароль верные - под ними успешно работает в аддоне CUBA 7.2, да и просто через ADExplorer можно вполне просматривать каталоги под этим логином/паролем.

Пробовали без указания свойства jmix.ldap.useActiveDirectoryConfiguration, тогда ошибка:

org.springframework.security.authentication.BadCredentialsException: Bad credentials

Версия платформы: 1.0.2

Что может быть не так?

Отвечу сам, поскольку, похоже, удалось выяснить причину.

На всякий случай уточню, что ожидалось стандартное поведение CUBA 7.2: пользователь логинится под своими ADшными данными - происходит попытка аутентификации через LDAP, а далее, при успехе, пользователь либо создается в приложении, либо синхронизируется, если уже был создан ранее.

Так вот, аутентифицироваться удалось только после добавления свойства jmix.ldap.activeDirectoryDomain и, главное, после добавления бина-наследника для AbstractLdapUserDetailsSynchronizationStrategy, о чем, вроде как написано в документации, но при этом размыто:

The addon comes with a basic abstract implementation: AbstractLdapUserDetailsSynchronizationStrategy, so in a simple case the strategy can be declared by only specifying a concrete User class and implementing a simple mapping:

что можно перевести как “аддон поставляется с базовой абстрактной имплементацией, поэтому, в простейшем случае, стратегия может быть определена с помощью…” (т.е.: есть какая-то существующая - стандартная реализация, но можно определить свою - тогда унаследуй класс и определяй)

Это баг аддона (отсутствие стандартной реализации) или ошибка в документации?

И еще момент, связанный с документацией:
в разделе Ldap properties перечислены все св-ва аддона, может туда еще стоит добавить описание свойства jmix.ldap.synchronizeUserOnLogin? Оно описано только в разделе с Active Directory, можно легко проглядеть таким как я.

Добрый день!

Спасибо за обратную связь.

Тут имеется в виду, что для настройки стратегии синхронизации достаточно только указать класс User, а также определить минимальный маппинг атрибутов. При этом, объявление стратегии обязательно, т.к. аддон предоставляет в виде “базовой” стратегии лишь общую функциональность, а оставшаяся часть является специфичной для каждого проекта (например, класс User, который генерируется для каждого проекта и может быть изменен по желанию). Подумаем, как переформулировать этот момент в документации, чтобы подчеркнуть необходимость объявления данного бина.

Спасибо, добавим.

Добрый день,
Еще по поводу сообщений об ошибках.
Вводил неверно пользователя (с доменом перед слешем) - пишет Supplied password was invalid.
По идее должно ругаться на имя пользователя.
Убрал домен - авторизовался успешно.

Подскажите, где и что объявить? Есть ли где какой пример?

https://docs.jmix.ru/1.x/jmix/1.5/ldap/getting-started.html#configuring-synchronization

1 симпатия

Вы бы новую тему завели.