签名方法 v2
申请安全凭证
本文使用的安全凭证为密钥,密钥包括 accessKeyId 和 accessKeyPassword。
AccessKeyId:用于标识 API 调用者身份,可以简单类比为用户名。
AccessKeyPassword:用于验证 API 调用者的身份,可以简单类比为密码。
用户必须严格保管安全凭证,避免泄露,否则将危及财产安全。如已泄漏,请立刻禁用该安全凭证。
你可以根据Zenlayer的用户指南文档来获取你的安全凭证。
签名过程v2
Zenlayer Open API V2 支持 Post 请求,仅支持 Content-Type: application/json
。 接口使用json格式进行调用。
下面以裸机云查询实例列表为例:
Request Headers:
X-ZC-Timestamp
请求的时间戳,精确到秒
1673361177
X-ZC-Version
请求的API版本
2022-11-20
X-ZC-Action
请求的动作
DescribeInstances
X-ZC-Signature-Method
签名方法
ZC2-HMAC-SHA256
Authorization
签名认证
1. 拼接规范请求串
按如下伪代码格式拼接规范请求串(CanonicalRequest):
HTTPRequestMethod
HTTP 请求方法。
固定为POST。
CanonicalURI
URI 参数。
API 固定为正斜杠(/)。
CanonicalQueryString
发起 HTTP 请求 URL 中的查询字符串。
对于 POST 请求,固定为空字符串""。
CanonicalHeaders
参与签名的头部信息,可加入自定义的头部参与签名以提高自身请求的唯一性和安全性。
拼接规则:头部 key 和 value 统一转成小写,并去掉首尾空格,按照 key:value\n 格式拼接(注意最后包含'\n');多个头部,按照头部 key(小写)的 ASCII 升序进行拼接。此示例计算结果是:
content-type:application/json; charset=utf-8\nhost:console.zenlayer.com\n
。
SignedHeaders
参与签名的头部信息。
说明此次请求有哪些头部参与了签名,和 CanonicalHeaders 包含的头部内容是一一对应的。content-type 和 host 为必选头部。 拼接规则:头部 key 统一转成小写;多个头部 key(小写)按照 ASCII 升序进行拼接,并且以分号(;)分隔。此示例为content-type;host
。
HashedRequestPayload
请求正文(payload,即 body)。
此示例为{"pageSize":10,"pageNum":1,"zoneId":"HKG-A"}
)的哈希值,计算伪代码为 HexEncode(Hash(RequestPayload)),即对 HTTP 请求正文做 SHA256 哈希,然后十六进制编码。此示例的计算结果是 :5f714687ba91c606d503467766151206392474accd137ffea6dce2420b67c29a
。
2. 拼接待签字符串
Algorithm
签名算法。
目前固定为 ZC2-HMAC-SHA256
。
RequestTimestamp
请求时间戳。
即请求头部的公共参数 X-ZC-Timestamp 取值,取当前时间 UNIX 时间戳,精确到秒。此示例取值为1673361177
。
HashedCanonicalRequest
前述步骤拼接所得规范请求串的哈希值。
计算伪代码为 Lowercase(HexEncode(Hash.SHA256(CanonicalRequest)))。此示例计算结果是: 29396f9dfa0f03820b931e8aa06e20cda197e73285ebd76aceb83f7dede493ee
。
根据以上规则,示例中得到的待签名字符串如下:
3. 基于 AK 和 StringToSign 计算出签名
计算签名,伪代码如下:
AccessKeyPassword
原始的 AccessKeyPassword。
如 Gu5t9xGARNpq86cd98joQYCN3
。
StringToSign
步骤二获得的结果。
4. 拼接 Authorization
按如下格式拼接 Authorization:
Algorithm
签名算法。
目前为 ZC2-HMAC-SHA256
。
AccessKeyId
密钥对中的 AccessKeyId。
如 0D9UtpyKYcHxms5v
。
SignedHeaders
见上文,参与签名的头部信息。
此示例取值为 content-type;host
。
Signature
签名值。
根据以上方法,此示例计算结果是 efb356c32e55c781e10dc676da59462c22596d82e91c57803666243379555b2f
。
最后更新于