JFrog Container Registry 7.3.2 не будет работать с Active Directory - PullRequest
0 голосов
/ 03 апреля 2020

Я надеялся, что кто-то здесь сможет мне помочь. В настоящее время мы оцениваем Artifactory - контейнерный реестр JFrog, работающий как сервис Docker, и я не могу заставить эту штуку работать должным образом с нашим экземпляром Active Directory. У меня все работало нормально в версии 6, но с выпуском версии 7 я решил начать новую с новой версией.

Итак, у меня есть artifactory-jcr: 7.3.2 и работает в нашем рое. Go в администрирование -> безопасность -> LDAP и создайте новый профиль настроек LDAP со следующими полями:

URL-адрес LDAP: ldap: //mydc.company.net: 389 / DC = компания, D C=net

Шаблон DN пользователя: blank

Атрибут электронной почты: mail

Фильтр поиска: (sAMAccountName = {0})

База поиска: OU = Пользователи компании

Поддерево поиска : проверено

DN менеджера: CN = _svcAccount, OU = учетные записи служб, OU = пользователи компании, DC = компания, D C=net

Пароль менеджера: Правильный пароль

DN менеджера указан правильно, пароль проверен и проверен. Я могу войти в систему с учетной записи службы с любого компьютера и успешно запросить каталог с помощью ADExplorer и выполнить запрос для моей учетной записи, используя только мой sAMAccountName, который возвращает мой пользовательский объект. Таким образом, я знаю, что пароль учетной записи службы правильный, разрешения для него правильные, и он может успешно выдавать запросы.

Но при попытке протестировать учетную запись со страницы профиля настроек LDAP я получаю всплывающее сообщение об ошибке c с сообщением «Ошибка подключения к серверу LDAP:»

Для журнала: Я просматриваю файл /var/opt/artifactory/artifactory-service.log.

Вот запись, следующая сразу после неудачной попытки «тестовой учетной записи»:

2020-04-03T17:16:46.714Z [jfrt ] [ERROR] [7faa71d56a50ef2b] [o.a.s.l.AbstractLdapService:67] [http-nio-8081-exec-4] - Error connecting to the LDAP server: 


org.springframework.security.authentication.AuthenticationServiceException: User myuseraccount failed to authenticate


    at org.artifactory.security.ldap.ArtifactoryBindAuthenticator.authenticate(ArtifactoryBindAuthenticator.java:166)


    at org.artifactory.security.ldap.LdapServiceImpl.testLdapConnection(LdapServiceImpl.java:77)


    at org.artifactory.security.SecurityServiceImpl.testLdapConnection(SecurityServiceImpl.java:3193)


    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)


    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)


    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)


    at java.base/java.lang.reflect.Method.invoke(Method.java:566)


    at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:343)


    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:205)


    at com.sun.proxy.$Proxy156.testLdapConnection(Unknown Source)


    at org.artifactory.ui.rest.service.admin.security.ldap.ldapsettings.TestLdapSettingsService.testLdapConnection(TestLdapSettingsService.java:76)


    at org.artifactory.ui.rest.service.admin.security.ldap.ldapsettings.TestLdapSettingsService.execute(TestLdapSettingsService.java:63)


    at org.artifactory.rest.common.service.ServiceExecutor.process(ServiceExecutor.java:38)


    at org.artifactory.rest.common.resource.BaseResource.runService(BaseResource.java:92)


    at org.artifactory.ui.rest.resource.admin.security.ldap.LdapSettingResource.testLdapSetting(LdapSettingResource.java:90)


    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)


    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)


    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)


    at java.base/java.lang.reflect.Method.invoke(Method.java:566)


    at org.glassfish.jersey.server.model.internal.ResourceMethodInvocationHandlerFactory.lambda$static$0(ResourceMethodInvocationHandlerFactory.java:76)


    at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher$1.run(AbstractJavaResourceMethodDispatcher.java:148)


    at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.invoke(AbstractJavaResourceMethodDispatcher.java:191)


    at org.glassfish.jersey.server.model.internal.JavaResourceMethodDispatcherProvider$ResponseOutInvoker.doDispatch(JavaResourceMethodDispatcherProvider.java:200)
2020-04-03T17:16:46.732Z [jfrt ] [ERROR] [7faa71d56a50ef2b] [o.a.s.l.AbstractLdapService:68] [http-nio-8081-exec-4] - Error connecting to the LDAP server:
2020-04-03T17:17:57.524Z [jfrt ] [WARN ] [81a5689d90762c9 ] [o.a.s.l.LdapServiceImpl:179   ] [http-nio-8081-exec-8] - Unexpected exception in LDAP query:for user myuseraccount vid LDAP: [LDAP: error code 49 - 80090308: LdapErr: DSID-0C090446, comment: AcceptSecurityContext error, data 52e, v2580]; nested exception is javax.naming.AuthenticationException: [LDAP: error code 49 - 80090308: LdapErr: DSID-0C090446, comment: AcceptSecurityContext error, data 52e, v2580]
2020-04-03T17:17:57.547Z [jfrt ] [INFO ] [81a5689d90762c9 ] [o.a.s.l.LdapServiceImpl:129   ] [http-nio-8081-exec-8] - Couldn't find user named "myuseraccount" in ADsettings

Из логина я пытаюсь использовать только имя своей учетной записи sam. Я получаю сообщение над формой входа, в котором говорится: «Неверное имя пользователя или пароль»

Вот запись в журнале, созданная в то время:

2020-04-03T17:05:12.060Z [jfrt ] [WARN ] [77c816e57e51530 ] [o.a.s.l.LdapServiceImpl:179   ] [http-nio-8081-exec-8] - Unexpected exception in LDAP query:for user admin vid LDAP: [LDAP: error code 49 - 80090308: LdapErr: DSID-0C090446, comment: AcceptSecurityContext error, data 52e, v2580]; nested exception is javax.naming.AuthenticationException: [LDAP: error code 49 - 80090308: LdapErr: DSID-0C090446, comment: AcceptSecurityContext error, data 52e, v2580]

Я использую только имя учетной записи sam для входа в систему, а не имя пользователя. Я также пропускаю часть имени домена с именем netb ios. Если я пытаюсь добавить полное имя учетной записи SAM для включения домена, «companyname \ myuseraccount», я получаю страницу ошибки Status 500.

Может кто-нибудь сказать мне, что я делаю здесь неправильно? Спасибо за любую помощь!

1 Ответ

1 голос
/ 03 апреля 2020

Вскоре после публикации этого вопроса я решил зайти в работающий контейнер jcr, скопировать и установить необходимые rpm-файлы и заставить openldap работать. Затем использовал ldapsearch из контейнера для запроса нашего контроллера домена, используя параметры, которые я предоставил для артефактного пользовательского интерфейса. И альт! Проблема заключалась в том, чтобы связать DN. Я думал, что поле формы DN диспетчера должно быть полным отличительным именем привязываемой учетной записи пользователя, используемой для запроса каталога, но ldapsearch возвращал объект, который не обнаружил ошибок.

Я изменил привязывающую учетную запись на имя учетной записи SAM службы ("_svcAccount") и получил результат обратно. С тех пор я вернулся в настройки артефакта и обновил DN диспетчера до «_svcAccount», и все работает.

Jfrog должен изменить описание поля DN менеджера. Отличительное имя состоит из полного пути LDAP к объекту. Что не работает, по крайней мере, не в моей конкретной ситуации. Другие продукты на основе Java, которые мы используем, например, SonarQube, используют полное отличительное имя classi c для учетной записи bind. Реестр контейнеров Jfrog, по-видимому, не.

-Update - мне пришлось использовать домен NetB IOS в качестве части учетной записи DN менеджера, чтобы заставить его аутентифицироваться. Таким образом, вместо «_svcAccount» в качестве DN диспетчера, я должен был использовать «mycompany \ _svcAccount» в качестве DN диспетчера. Однако пользователи Active Directory не используют домен NetB IOS при входе в Реестр контейнеров, только имя учетной записи SAM. (т.е. "myAccount" против "mycompany \ myAccount")

...