generateStringToSign method
按如下格式拼接待签名字符串:
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');
}