JFrog Artifactory 将什么令牌端点用于其 Docker 注册表?

2024-05-05

我正在尝试编写基本上可以执行以下操作的代码docker inspect发布到私人 JFrog Artifactory 的图像,而无需自己实际提取图像。我一直在使用一个名为在不拉取的情况下检查 Docker 镜像 https://ops.tips/blog/inspecting-docker-image-without-pull/了解 API 调用的详细信息。该指南使用公共 Docker Hub 注册表作为基础,而不是 Artifactory,这有点不同。

基本上,需要进行 3 个 API 调用:

  1. 首先获得一个令牌
  2. 然后获取给定图像/标签的“摘要”
  3. 最后得到该摘要对应的配置

我已将 Artifactory 配置为允许匿名读取访问。所以任何知道 URL 的人都可以做docker pull无需提供凭据,它就可以工作。我已经验证了这一点。

因为它允许匿名访问,所以我首先假设我也许可以跳过 API 调用 #1(获取令牌)并直接进行 API 调用 #2(查找摘要)而不提供令牌。然而,这种情况并非如此。在这种情况下,Artifactory 将返回 UNAUTHORIZED 错误。

接下来我想,好吧,好吧,我只需到达令牌端点即可。但不是auth.docker.io我将其更改为 Artifactory 服务器的子域,然后 POST 到/token终点在那里。那行不通。然后我发现了这部分是官方ContainerD代码 https://github.com/containerd/containerd/blob/master/remotes/docker/authorizer.go#L209它实际上内置了专门为 JFrog Artifactory 定制的条件案例。

当您尝试 POST 到/token端点,而且 Docker 客户端也意识到了这一点,因此回退到尝试 GET 请求。但这对我来说有点模糊。我不是 Golang 程序员,因此我在理解 Docker CLI Go 代码中发生的情况时遇到一些困难。

我假设它只是将 POST 更改为 GET,但在其他方面使用相同的 URL(即/v2/token)。然而,这不起作用。当我尝试到达该端点时,我仍然收到未经授权的响应。再往下看容器D代码 https://github.com/containerd/containerd/blob/master/remotes/docker/authorizer.go#L257,看起来它可能正在使用用户名和秘密设置基本身份验证。但我不确定这些值是什么,因为这是通过匿名访问完成的。明显是在打some自运行以来,我的 Artifactory 服务器上的令牌端点docker pull是成功的。我只是想知道后备 API 调用到底是什么样子的?需要向其中传递哪些参数/标头/身份验证?


Artifactory 允许您通过其 Web 界面手动创建 API 密钥(单击进入您的用户个人资料),然后您可以使用此密钥代替密码进行后续 API 调用。该密钥可以持续到您刷新为止。

请参阅此处了解如何使用密钥/令牌 https://www.jfrog.com/confluence/display/ACC/Access+Tokens#AccessTokens-UsingTokens

对于编程式令牌管理,Artifactory 的令牌 api 没有与 docker.io 相同的端点,请参阅他们的文档在这里 https://www.jfrog.com/confluence/display/RTF/Artifactory+REST+API#ArtifactoryRESTAPI-CreateToken.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JFrog Artifactory 将什么令牌端点用于其 Docker 注册表? 的相关文章

随机推荐