使用 API v2 从 azure CR 获取单个层 blob

fetch individual layer blobs from azure CR using API v2

我正在尝试为 Azure 注册表重新实现 docker pull。过去,我已经按照官方文档针对 Docker Hub 成功地做到了这一点。

对于 Azure,我设法通过 _catalog 列出存储库标签并获取清单 (/manifests),但是我遇到了针对 /blobs 的身份验证问题,我收到了:

<Code>InvalidAuthenticationInfo</Code><Message>Authentication information is not given in the correct format. Check the value of Authorization header.

我的代码类似于:

    const headers: any = {
      Accept: mediaType
    };
    const config: any = {
      method: "GET",
      uri: `https://${registryConfig.base}/v2/${repo}/blobs/${sha}`,
      headers
    };

    if (token) {
      headers.Authorization = `Bearer ${token}`;
    } else {
      config.auth = { username, password };
    }
    return request(config)
  }

这适用于我使用不记名令牌的 Docker 集线器。关于如何针对 Azure 的 blob 服务进行正确身份验证的任何提示?

谢谢!

问题是由于自动重定向(以及 Azure 的某些 unexpected/non-documented 行为)造成的。

针对 /blobs 端点的调用(如果它们经过适当的身份验证)包括一个 Location header,它由一个包含所需 blob 的不同 URI 组成。

但是,如果您尝试使用授权 header 调用它,它会失败并出现上述错误。