阿里云 registry 401 UNAUTHORIZED

Bertha 。 2022-01-22 07:23 473阅读 0赞

需求:请求阿里云的镜像仓库,读取镜像的信息,直接读取肯定返回错误,毕竟仓库是私有的嘛。
既然是私有的,请求的时候,肯定要带上账号密码或者Token等这样的信息才可以。那么如何携带这些内容呢?

几经周折,过程不在赘述,下面直接给出方法:
一、现状(问题)
1、请求目标

  1. https://registry.cn-shanghai.aliyuncs.com/v2/nuggets/nuggets-docker/tags/list

2、获得错误的结果

  1. {
  2. errors: [
  3. {
  4. code: "UNAUTHORIZED",
  5. message: "authentication required",
  6. detail: [
  7. {
  8. Type: "repository",
  9. Class: "",
  10. Name: "nuggets/nuggets-docker",
  11. Action: "pull"
  12. }
  13. ]
  14. }
  15. ]
  16. }

二、处理方法
1、获得auth地址、service参数、scope参数

  1. [root@test run]# curl -v -X GET https://registry.cn-shanghai.aliyuncs.com/v2/nuggets/nuggets-docker/tags/list
  2. * About to connect() to registry.cn-shanghai.aliyuncs.com port 443 (#0)
  3. * Trying 139.196.71.17...
  4. * Connected to registry.cn-shanghai.aliyuncs.com (139.196.71.17) port 443 (#0)
  5. * Initializing NSS with certpath: sql:/etc/pki/nssdb
  6. * CAfile: /etc/pki/tls/certs/ca-bundle.crt
  7. CApath: none
  8. * SSL connection using TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
  9. * Server certificate:
  10. * subject: CN=*.registry.aliyuncs.com,O="Alibaba (China) Technology Co., Ltd.",L=HangZhou,ST=ZheJiang,C=CN
  11. * start date: Jan 28 03:01:05 2019 GMT
  12. * expire date: Jan 29 03:01:05 2020 GMT
  13. * common name: *.registry.aliyuncs.com
  14. * issuer: CN=GlobalSign Organization Validation CA - SHA256 - G2,O=GlobalSign nv-sa,C=BE
  15. > GET /v2/nuggets/nuggets-docker/tags/list HTTP/1.1
  16. > User-Agent: curl/7.29.0
  17. > Host: registry.cn-shanghai.aliyuncs.com
  18. > Accept: */*
  19. >
  20. < HTTP/1.1 401 Unauthorized
  21. < Content-Type: application/json; charset=utf-8
  22. < Docker-Distribution-Api-Version: registry/2.0
  23. < Www-Authenticate: Bearer realm="https://dockerauth.cn-hangzhou.aliyuncs.com/auth",service="registry.aliyuncs.com:cn-shanghai:26842",scope="repository:nuggets/nuggets-docker:pull"
  24. < Date: Wed, 05 Jun 2019 07:52:10 GMT
  25. < Content-Length: 165
  26. <
  27. {"errors":[{"code":"UNAUTHORIZED","message":"authentication required","detail":[{"Type":"repository","Class":"","Name":"nuggets/nuggets-docker","Action":"pull"}]}]}
  28. * Connection #0 to host registry.cn-shanghai.aliyuncs.com left intact

记下输出内容中的 Www-Authenticate 后面的内容,获得Token时使用。

2、获得Token
在这里插入图片描述

  1. curl -u clientId:clientSecret -X POST -d "username=[你的账号]&password=[图上设置的密码]&service=registry.aliyuncs.com:cn-shanghai:26842&scope=repository:nuggets/nuggets-docker:pull" https://dockerauth.cn-hangzhou.aliyuncs.com/auth

记下输出的 token(token和access_token值一样),下一步使用。

3、可以请求接口了

  1. curl -u clientId:clientSecret -v -H "Accept: application/vnd.docker.distribution.manifest.v2+json" -H "Authorization: Bearer [你上一步获得Token]" "https://registry.cn-shanghai.aliyuncs.com/v2/nuggets/nuggets-docker/tags/list"

这样就可以看到正确的结果了,例如我的示例的结果是:

  1. {"name":"nuggets/nuggets-docker","tags":["0.0.1","4121a0c58eba2a077e9c05bfcaba56f04306c554","4121a0c58eba2a077e9c05bfcaba56f04306c554_develop","develop_4121a0c58eba2a077e9c05bfcaba56f04306c554","latest"]}

(END)

发表评论

表情:
评论列表 (有 0 条评论,473人围观)

还没有评论,来说两句吧...

相关阅读

    相关 阿里 registry 401 UNAUTHORIZED

    需求:请求阿里云的镜像仓库,读取镜像的信息,直接读取肯定返回错误,毕竟仓库是私有的嘛。 既然是私有的,请求的时候,肯定要带上账号密码或者Token等这样的信息才可以。那么如