generateStringToSign method

String generateStringToSign(
  1. String canonicalRequest,
  2. DateTime date,
  3. String service
)

按如下格式拼接待签名字符串:

StringToSign =
 Algorithm + '\n' +
 RequestTimestamp + '\n' +
 CredentialScope + '\n' +
 HashedRequestPayload

其中:

  • Algorithm:签名算法,目前固定为 TC3-HMAC-SHA256。
  • RequestTimestamp:请求时间戳,即请求头部的公共参数 X-TC-Timestamp 取值, 取当前时间 UNIX 时间戳,精确到秒。此示例取值为 1551113065
  • CredentialScope: 凭证范围,格式为 Date/service/tc3_request, 包含日期、所请求的服务和终止字符串(tc3_request)。
    • Date: 为 UTC 标准时间的日期,取值需要和公共参数 X-TC-Timestamp 换算的 UTC 标准时间日期一致;
    • service:为产品名,必须与调用的产品域名一致。 此示例计算结果是 2019-02-25/cvm/tc3_request
    • tc3_request:终止字符串,固定为 tc3_request
  • HashedRequestPayload:前述步骤拼接所得规范请求串的哈希值,计算伪代码为:
    Lowercase(HexEncode(Hash.SHA256(CanonicalRequest)))
    
    此示例计算结果为:
    35e9c5b0e3ae67532d3c9f17ead6c90222632e5b1ff7f6e89887f1398934f064
    

根据以上规则,示例中得到的待签名字符串如下:

TC3-HMAC-SHA256
1551113065
2019-02-25/cvm/tc3_request
7019a55be8395899b900fb5564e4200d984910f34794a27cb3fb7d10ff6a1e84

Implementation

String generateStringToSign(
    String canonicalRequest, DateTime date, String service) {
  final requestTimestamp = generateTimestamp(date);
  final credentialScope = generateCredentialScope(date, service);
  final hashedRequestPayload = generateHashedRequestPayload(canonicalRequest);

  return [
    _algorithm,
    requestTimestamp,
    credentialScope,
    hashedRequestPayload,
  ].join('\n');
}