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