Аутентификация LDAP с использованием газированной воды

Нам нужно аутентифицировать пользователя с помощью LDAP в газированной воде. Мы попытались настроить то же самое, используя Sparkling-water 1.6.13 и h2O 3.14.0.2. Ниже приведена конфигурация:

*ldaploginmodule {
    org.eclipse.jetty.plus.jaas.spi.LdapLoginModule required
    debug="true"
    useLdaps="false"
    contextFactory="com.sun.jndi.ldap.LdapCtxFactory"
    hostname="localhost"
    port="389"
    bindDn="CN=admin,OU=Users,DC=company,DC=com"
    bindPassword="password"
    authenticationMethod="simple"
    forceBindingLogin="true"
    userBaseDn="dc=company,dc=com";
};*

Используемая команда: spark-submit --class water.SparklingWaterDriver --master yarn-client --num-executors 2 --driver-memory 6g --executor-memory 4g --executor- ядра 2 --conf 'spark.dynamicAllocation.enabled=false' --conf spark.ext.h2o.log.level=DEBUG --conf spark.ext.h2o.ldap.login=true --conf spark.ext.h2o .login.conf=/home/user/ldap.conf /home/user/sparkling-water-1.6.13/assembly/build/libs/sparkling-water-assembly_2.10-1.6.13-all.jar

Но мы столкнулись с некоторой проблемой. Пожалуйста, найдите ниже журналы ошибок. Был бы признателен за любую помощь в этом. ОШИБКА:

java.lang.NullPointerException
        at com.sun.jndi.ldap.AbstractLdapNamingEnumeration.getNextBatch(AbstractLdapNamingEnumeration.java:130)
        at com.sun.jndi.ldap.AbstractLdapNamingEnumeration.nextAux(AbstractLdapNamingEnumeration.java:258)
        at com.sun.jndi.ldap.AbstractLdapNamingEnumeration.nextImpl(AbstractLdapNamingEnumeration.java:249)
        at com.sun.jndi.ldap.AbstractLdapNamingEnumeration.next(AbstractLdapNamingEnumeration.java:203)
        at com.sun.jndi.ldap.AbstractLdapNamingEnumeration.nextElement(AbstractLdapNamingEnumeration.java:106)
        at com.sun.jndi.ldap.AbstractLdapNamingEnumeration.nextElement(AbstractLdapNamingEnumeration.java:40)
        at org.eclipse.jetty.plus.jaas.spi.LdapLoginModule.findUser(LdapLoginModule.java:513)
        at org.eclipse.jetty.plus.jaas.spi.LdapLoginModule.bindingLogin(LdapLoginModule.java:468)
        at org.eclipse.jetty.plus.jaas.spi.LdapLoginModule.login(LdapLoginModule.java:399)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:497)
        at javax.security.auth.login.LoginContext.invoke(LoginContext.java:755)
        at javax.security.auth.login.LoginContext.access$000(LoginContext.java:195)
        at javax.security.auth.login.LoginContext$4.run(LoginContext.java:682)
        at javax.security.auth.login.LoginContext$4.run(LoginContext.java:680)
        at java.security.AccessController.doPrivileged(Native Method)
        at javax.security.auth.login.LoginContext.invokePriv(LoginContext.java:680)
        at javax.security.auth.login.LoginContext.login(LoginContext.java:587)
        at org.eclipse.jetty.plus.jaas.JAASLoginService.login(JAASLoginService.java:217)
        at org.eclipse.jetty.security.authentication.BasicAuthenticator.validateRequest(BasicAuthenticator.java:83)
        at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:456)
        at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:111)
        at org.eclipse.jetty.server.Server.handle(Server.java:349)
        at org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:449)
        at org.eclipse.jetty.server.BlockingHttpConnection.handleRequest(BlockingHttpConnection.java:47)
        at org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.headerComplete(AbstractHttpConnection.java:910)
        at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:634)
        at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:230)
        at org.eclipse.jetty.server.BlockingHttpConnection.handle(BlockingHttpConnection.java:66)
        at org.eclipse.jetty.server.bio.SocketConnector$ConnectorEndPoint.run(SocketConnector.java:254)
        at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:599)
        at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:534)
        at java.lang.Thread.run(Thread.java:745)
17/10/17 12:45:47 WARN JAASLoginService:
javax.security.auth.login.LoginException: Error obtaining user info.
        at org.eclipse.jetty.plus.jaas.spi.LdapLoginModule.login(LdapLoginModule.java:438)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:497)
        at javax.security.auth.login.LoginContext.invoke(LoginContext.java:755)
        at javax.security.auth.login.LoginContext.access$000(LoginContext.java:195)
        at javax.security.auth.login.LoginContext$4.run(LoginContext.java:682)
        at javax.security.auth.login.LoginContext$4.run(LoginContext.java:680)
        at java.security.AccessController.doPrivileged(Native Method)
        at javax.security.auth.login.LoginContext.invokePriv(LoginContext.java:680)
        at javax.security.auth.login.LoginContext.login(LoginContext.java:587)
        at org.eclipse.jetty.plus.jaas.JAASLoginService.login(JAASLoginService.java:217)
        at org.eclipse.jetty.security.authentication.BasicAuthenticator.validateRequest(BasicAuthenticator.java:83)
        at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:456)
        at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:111)
        at org.eclipse.jetty.server.Server.handle(Server.java:349)
        at org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:449)
        at org.eclipse.jetty.server.BlockingHttpConnection.handleRequest(BlockingHttpConnection.java:47)
        at org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.headerComplete(AbstractHttpConnection.java:910)
        at

person Satish Agrawal    schedule 25.10.2017    source источник


Ответы (2)


Скорее всего, это ошибка конфигурации, уникальная для вашей среды. Обратитесь за помощью к специалистам вашей организации по LDAP/AD. Никому извне будет нелегко помочь вам.

Вот несколько приемов, которые я рекомендую для отладки проблем с LDAP.

Во-первых, не начинайте отладку непосредственно в Sparkling Water. Отлаживайте его в чисто автономном H2O без Hadoop или Spark, чтобы вы могли изолировать проблему и легко увидеть, что происходит, и вам не нужно искать stdout/stderr/logs.

Во-вторых, вы можете включить уровень журнала DEBUG jetty и получить больше информации о том, что делает ldaploginmodule, добавив следующий файл в путь к классам:

jetty-logging.properties

org.eclipse.jetty.util.log.class=org.eclipse.jetty.util.log.StdErrLog
org.eclipse.jetty.LEVEL=DEBUG

Итак, запустите так (убедитесь, что jetty-logging.properties находится в текущем каталоге):

java -cp h2o.jar:. water.H2OApp -ldap_login -login_conf ldap-config-file
person TomKraljevic    schedule 26.10.2017
comment
Спасибо за ваш вклад, я попытался настроить, как указано выше, в H2O без Spark и Hadoop, но все еще получаю ту же ошибку, что и выше, без каких-либо подробностей. Обратите внимание, что такая же конфигурация LDAP абсолютно нормально работает в нескольких других инструментах. - person Satish Agrawal; 27.10.2017
comment
Я не уверен, для чего нужны *. Попробуйте удалить те. Следующее, что я хотел бы попробовать, это отключить Ldaps и проверить фактические пакеты сетевого уровня с помощью tcpdump. После этого я пошел бы проверить исходный код. После этого я запускал автономный H2O в хорошем отладчике Java, таком как IntelliJ IDEA, и выполнял его в один шаг. (И, наконец, если вам просто нужна ручная помощь в отладке проблемы безопасности, вы можете обратиться в компанию h2o.ai за поддержкой предприятия... я все еще думаю, что проблема с конфигурацией является наиболее вероятной проблемой...) - person TomKraljevic; 27.10.2017
comment
Кроме того, пожалуйста, ознакомьтесь с нашей новой документацией. Недавно LDAP был полностью протестирован и задокументирован в документах. h2o.ai/sparkling-water/2.2/latest-stable/doc/tutorials/ - person Jakub Háva; 26.03.2018

Два дополнительных примечания:

  • не используйте газированную воду 1.6 и обновите
  • после обновления для конфигурации LDAP вам необходимо изменить ссылку на LoginModlue на ai.h2o.org.eclipse.jetty.plus.jaas.spi.LdapLoginModule required
person Michal    schedule 28.02.2018