You need to enable JavaScript to run this app.
导航
签名机制
最近更新时间:2024.07.01 20:45:30首次发布时间:2022.07.28 22:07:06

如果您使用火山引擎 API 来调用云服务的功能,必须在 API 请求头中包含签名参数。签名参数中需要包含 Signature 签名。

签名机制

Signature 签名是基于密钥(kSigning)和签名字符串(StringToSign)计算出来的。计算逻辑的伪代码如下:

// kSigning:密钥
// StringToSign:签名字符串
// HMAC:指代 HMAC-SHA256
Signature = HexEncode(HMAC(kSigning, StringToSign))

kSigning

kSigning 表示用来计算签名的密钥。要获取 kSigning,必须先从密钥列表页面获取 Secret Access Key。然后使用以下代码生成 kSigning。

kSecret = *Your Secret Access Key*
kDate = HMAC(kSecret, Date)
kRegion = HMAC(kDate, Region)
kService = HMAC(kRegion, Service)
kSigning = HMAC(kService, "request")

StringToSign

StringToSign 表示用来计算签名的签名字符串,包含规范请求的元数据信息。StringToSign 是通过连接以下值生成的:

  • 签名算法。
  • 请求日期。
  • 凭证范围。
  • 规范请求的哈希值。

StringToSign 的伪代码如下:

// Hash 函数使用 SHA256 算法
StringToSign = Algorithm + '\n' + RequestDate + '\n' + CredentialScope + '\n' + HexEncode(Hash(CanonicalRequest))

StringToSign 伪代码中的参数含义如下:

Algorithm
Algorithm 表示签名算法,是一个固定值的字符串。取值为 HMAC-SHA256

RequestDate
RequestDate 表示请求日期,与公共参数 x-date 相同。示例值是20210913T081805Z

CredentialScope
CredentialScope 表示凭证范围。格式如下:

YYYYMMDD/region/service/request

CanonicalRequest

CanonicalRequest 表示规范请求。CanonicalRequest 的伪代码如下:

HTTPRequestMethod + '\n' + CanonicalURI + '\n' + CanonicalQueryString + '\n' + CanonicalHeaders + '\n' + SignedHeaders + '\n' + HexEncode(Hash(RequestPayload))

CanonicalRequest 伪代码中参数的含义如下:

  • HTTPRequestMethod 表示请求方法。该参数的取值是 GET 或 POST。
  • CanonicalURI 表示请求路径。
  • CanonicalQueryString 表示规范的 query string。CanonicalQueryString 的值是通过以下规则生成的:
    • 对所有参数名,在字符级别按升序排序。
  • CanonicalHeaders 表示规范的 headers。CanonicalHeaders 是通过以下步骤生成的:
    1. 将参与签名计算的 headers 的 keys 转化成小写字母。
    2. 在字符级别对 keys 进行升序排序。
    3. 以 key-value 的格式拼接所有的 headers。
    4. 对每个 header 添加换行符(\n)。
  • SignedHeaders 表示 headers 中 key 的列表。这些 keys 是在字符级别升序排序的。
  • HexEncode(Hash(RequestPayload)) 表示一个计算值。该计算值是通过对请求体中 payload 的内容应用 SHA256 哈希算法计算得到的。

示例代码

在示例代码中,我们调用 requestMCDN 函数进行加密和发起请求,并输出请求的结果。这里我们以调用 DescribeContentQuota API 为例,获取在多云CDN服务中某个账号 ID 的刷新与预热任务的配额。