生成签名字符串 SIGNATURE
的具体步骤如下:
将请求的方法和URI路径,例如 GET /v2/library/nginx/blobs/sha256:8af6e8f9fa3b4cbbda5c28a49c8795bcac0f7a58d8a4d83adec4107223ccbf06 ,进行 URL 编码,并在前面加上换行符(\n),得到规范化的请求字符串。
获取当前时间戳,并将其转换成以 ISO8601 标准格式表示的日期字符串,例如 2021-03-25T12:00:00Z 。
将规范化的请求字符串和日期字符串以及以下 HTTP 请求头参数按字典序排序,然后将它们拼接起来:
accept:application/vnd.docker.distribution.manifest.v2+json
content-length:0
content-type:
date:${time}
host:${registry_host}
x-acs-action:
x-acs-region-id:
其中 ${time}
表示上一步中获取到的日期字符串,${registry_host}
表示您使用的 Registry 的域名或 IP 地址。注意这里不需要换行符(\n)。
- 使用 HMAC-SHA256 算法计算第三步中拼接出来的字符串的签名,使用 Access Key Secret 作为密钥。计算出来的签名值即为签名字符串
SIGNATURE
。
最后,在下载时将 SIGNATURE
拼接到 Authorization 请求头中即可完成访问授权。