Я пытаюсь добавить аутентификацию LDAP (не LDAPS) в NiFi 1.25.0 в Windows, чтобы пользователи могли входить в систему, используя свои сетевые идентификаторы, но я не могу обойти эту ошибку:
«FactoryBean выдал исключение при создании объекта; вложенное исключение — java.lang.ClassCastException: класс org.apache.nifi.ldap.LdapProvider»
После перезагрузки через пару минут появляется ошибка. Между перезагрузками проходит около 15 секунд. Служба никогда не запускается.
NiFi работает нормально с настройкой по умолчанию «однопользовательский авторизатор».
Когда я запускаю NiFi, с моей машины не поступает никаких запросов протокола LDAP, поэтому я предполагаю, что код никогда не доходит до точки, где он пытается подключиться. «ClassCastException» звучит как ошибка кода, но я предполагаю, что в моей конфигурации (ниже) есть проблема.
Записи журнала ошибок включают в себя:
ни-фи-bootstrap.log
ОШИБКА [обработчик журнала NiFi] org.apache.nifi.StdErr Не удалось запустить веб-сервер: ошибка при создании компонента с именем «niFiWebApiConfiguration»: BeanPostProcessor перед созданием экземпляра компонента не удалось; вложенным исключением является org.springframework.beans.factory.UnsatisfiedDependencyException: ошибка при создании bean-компонента с именем org.springframework.security.config.annotation.method.configuration.PrePostMethodSecurityConfiguration': неудовлетворенная зависимость, выраженная через параметр конструктора 0; вложенным исключением является org.springframework.beans.factory.UnsatisfiedDependencyException: ошибка создания bean-компонента с именем «org.apache.nifi.web.security.configuration.AuthenticationSecurityConfiguration»: неудовлетворенная зависимость, выраженная через параметр конструктора 2; вложенное исключение: org.springframework.beans.factory.BeanCreationException: ошибка при создании bean-компонента с именем «authorizer»: FactoryBean выдал исключение при создании объекта; вложенным исключением является java.lang.ClassCastException: класс org.apache.nifi.ldap.LdapProvider
ОШИБКА [обработчик журнала NiFi] org.apache.nifi.StdErr Завершение работы...
ИНФОРМАЦИЯ [main] org.apache.nifi.bootstrap.RunNiFi NiFi никогда не запускался. Не перезапускает NiFi
2024-04-30 09:08:29,954 ОШИБКА [основная] o.s.web.context.ContextLoader Не удалось инициализировать контекст
org.springframework.beans.factory.BeanCreationException: ошибка при создании компонента с именем «niFiWebApiConfiguration»: BeanPostProcessor перед созданием экземпляра компонента не удалось; вложенным исключением является org.springframework.beans.factory.UnsatisfiedDependencyException: ошибка создания bean-компонента с именем «org.springframework.security.config.annotation.method.configuration.PrePostMethodSecurityConfiguration»: неудовлетворенная зависимость, выраженная через параметр конструктора 0; вложенным исключением является org.springframework.beans.factory.UnsatisfiedDependencyException: ошибка создания bean-компонента с именем «org.apache.nifi.web.security.configuration.AuthenticationSecurityConfiguration»: неудовлетворенная зависимость, выраженная через параметр конструктора 2; вложенное исключение: org.springframework.beans.factory.BeanCreationException: ошибка при создании bean-компонента с именем «authorizer»: FactoryBean выдал исключение при создании объекта; вложенным исключением является java.lang.ClassCastException: класс org.apache.nifi.ldap.LdapProvider
...
Вызвано: org.springframework.beans.factory.UnsatisfiedDependencyException: ошибка создания bean-компонента с именем «org.apache.nifi.web.security.configuration.AuthenticationSecurityConfiguration»: неудовлетворенная зависимость, выраженная через параметр конструктора 2; вложенное исключение: org.springframework.beans.factory.BeanCreationException: ошибка при создании bean-компонента с именем «authorizer»: FactoryBean выдал исключение при создании объекта; вложенным исключением является java.lang.ClassCastException: класс org.apache.nifi.ldap.LdapProvider
...
Вызвано: org.springframework.beans.factory.BeanCreationException: ошибка при создании bean-компонента с именем «authorizer»: FactoryBean выдал исключение при создании объекта; вложенным исключением является java.lang.ClassCastException: класс org.apache.nifi.ldap.LdapProvider
...
Вызвано: java.lang.ClassCastException: класс org.apache.nifi.ldap.LdapProvider
(Извиняюсь за форматирование. Все утро ругаюсь с редактором.)
Настройки конфигурации ниже. Наш сервер LDAP не использует SSL/TLS, поэтому значения конфигурации для хранилища ключей, хранилища доверенных сертификатов и т. д. отсутствуют.
NiFi.свойства:nifi.security.user.authorizer=ldap-provider
nifi.security.allow.anonymous.authentication=false
nifi.security.user.login.identity.provider=ldap-provider
авторизаторы.xml:
<authorizer>
<identifier>ldap-provider</identifier>
<class>org.apache.nifi.ldap.LdapProvider</class>
</authorizer>
логин-идентификатор-провайдеры.xml:
<provider>
<identifier>ldap-provider</identifier>
<class>org.apache.nifi.ldap.LdapProvider</class>
<property name = "Authentication Strategy">SIMPLE</property>
<property name = "Manager DN">CN=ourLdapUser,CN=Users,DC=ourDomain,DC=local</property>
<property name = "Manager Password">########</property>
<property name = "TLS - Keystore"></property>
<property name = "TLS - Keystore Password"></property>
<property name = "TLS - Keystore Type"></property>
<property name = "TLS - Truststore"></property>
<property name = "TLS - Truststore Password"></property>
<property name = "TLS - Truststore Type"></property>
<property name = "TLS - Client Auth"></property>
<property name = "TLS - Protocol"></property>
<property name = "TLS - Shutdown Gracefully"></property>
<property name = "Referral Strategy">FOLLOW</property>
<property name = "Connect Timeout">10 secs</property>
<property name = "Read Timeout">10 secs</property>
<property name = "Url">ldap://[ip address]:389</property>
<property name = "User Search Base">CN=Users,DC=ourDomain,DC=local</property>
<property name = "User Search Filter">sAMAccountName = {0}</property><!-- also tried uid = {0} -->
<property name = "Identity Strategy">USE_USERNAME</property>
<property name = "Authentication Expiration">12 hours</property>
</provider>
Я пробовал другие настройки конфигурации для авторизатора LDAP, которые нашел в Интернете, но ошибка ClassCastException для LdapProvider всегда останавливает выполнение. Я добавил набор конфигураций для "ldap-user-group-provider", который требует "composite-configurable-user-group-provider", "file-access-policy-provider" и "managed-authorizer", но не было разница.
Я убедился, что могу получить доступ к серверу LDAP со своей машины, и разрешил «домен» и «частный» доступ Java через брандмауэр Windows.
Я пробовал те же настройки в Windows 10 и Windows 11.
Я подключил к порту NiFi отладчик из Visual Studio 2019 Pro, но он практически остановил выполнение.
Я нашел исходный код класса LdapIdentityProvider, в котором считываются значения ldap-provider из файла login-identity-providers.xml. Должно быть INFO-сообщение, когда свойство «Стратегия идентификации» не установлено, но оно не прошло. (Я включил ведение журнала INFO с помощью этой строки в logback.xml: <logger name = "org.apache.nifi" level = "INFO" />
и получаю другие записи INFO.) Опять же, я не думаю, что выполнение заходит так далеко.
Мне удалось решить эту проблему, но я не уверен, что это исправило. Я считаю, что это была комбинация изменений.
В nifi.properties: nifi.security.user.authorizer=управляемый авторизатор
В авторизаторах.xml: Я удалил авторизатор ldap-провайдера, который, очевидно, добавил, чтобы попытаться обойти более раннюю ошибку, в которой говорилось, что он не определен. Я также включил определение управляемого авторизатора и настроил поставщика политики доступа к файлам с нашим исходным идентификатором администратора.