0

我希望这里有人可以帮助我。我们目前正在评估 JFrog 的 Artifactory - Container Registry 作为 Docker 服务运行,在我的一生中,我无法让这个东西与我们的 Active Directory 实例正常工作。我让它在第 6 版中运行良好,但随着第 7 版的发布,我决定从新版本开始。

所以我在我们的集群中启动并运行了 artifactory-jcr:7.3.2。进入管理 -> 安全 -> LDAP 并使用以下字段创建一个新的 LDAP 设置配置文件:

LDAP URL:ldap://mydc.company.net:389/DC=company,DC=net

用户 DN 模式:空白

邮件属性:邮件

搜索过滤器:(sAMAccountName={0})

搜索库:OU=公司用户

搜索子树:选中

经理 DN:CN=_svcAccount,OU=服务帐户,OU=公司用户,DC=公司,DC=net

管理员密码:正确密码

Manager DN 正确,密码已经过验证和测试。sAMAccountName我可以从任何机器使用服务帐户登录,并使用 ADExplorer 成功查询目录,并仅使用返回我的用户对象的 my 对我的帐户发出查询。所以我知道服务帐户的密码是正确的,它的权限是正确的,它可以成功地发出查询。

但是,当尝试从 LDAP 设置配置文件页面测试帐户时,我收到一条通用错误消息弹出窗口,指出“连接到 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

在登录 ui 中,我尝试仅使用我的 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 帐户名进行登录,而不是用户主体名称。我也省略了登录的 netbios 域名部分。如果我尝试添加完整的 SAM 帐户名称以包含域,“companyname\myuseraccount”我会收到一个状态 500 错误页面。

谁能告诉我我在这里做错了什么?谢谢你的帮助!

4

1 回答 1

1

发布此问题后不久,我决定将 shell 放入正在运行的 jcr 容器中,并复制并安装必要的 rpm 文件并让 openldap 正常工作。然后使用容器中的 ldapsearch 使用我提供的人工 UI 的设置来查询我们的域控制器。还有中提琴!问题是绑定 DN。我认为 Manager DN 表单字段应该是用于查询目录的绑定用户帐户的完整可分辨名称,但 ldapsearch 返回对象未找到错误。

我将绑定帐户更改为服务帐户的 SAM 帐户名称(“_svcAccount”)并返回结果。从那以后,我回到了人工设置并将 Manager DN 更新为“_svcAccount”,一切正常。

Jfrog 应该更改 Manager DN 字段的描述。专有名称由对象的完整 LDAP 路径组成。这不起作用,至少在我的特定情况下不起作用。我们使用的其他基于 Java 的产品(如 SonarQube)使用经典的完整专有名称作为绑定帐户。Jfrog Container Registry 显然没有。

-更新——我最终不得不使用 NetBIOS 域作为 Manager DN 帐户的一部分来对其进行身份验证。因此,我不得不使用“mycompany\_svcAccount”作为 Manager DN,而不是“_svcAccount”作为 Manager DN。但是,Active Directory 用户在登录 Container Registry 时不使用 NetBIOS 域,只使用 SAM 帐户名。(即“myAccount”与“mycompany\myAccount”)

于 2020-04-03T19:31:18.263 回答