签名API请求
第一步:准备可用的阿里云访问秘钥
给 API 请求生成签名,需使用一对访问秘钥(AccessKeyId/AccessKeySecret)。您可以使用已经存在的访问秘钥对,也可以创建新的访问秘钥对,但需要保证使用的秘钥对处在“启用”状态。
第二步: 生成请求的签名字符串
事件监控的API 签名字符串由 HTTP 请求中的 Method,Header 和 Body 信息一同生成,具体方式如下:
- [backcolor=transparent]SignString[backcolor=transparent] [backcolor=transparent]=[backcolor=transparent] VERB [backcolor=transparent]+[backcolor=transparent] [backcolor=transparent]"\n"
- [backcolor=transparent] [backcolor=transparent]+[backcolor=transparent] CONTENT[backcolor=transparent]-[backcolor=transparent]MD5 [backcolor=transparent]+[backcolor=transparent] [backcolor=transparent]"\n"
- [backcolor=transparent] [backcolor=transparent]+[backcolor=transparent] CONTENT[backcolor=transparent]-[backcolor=transparent]TYPE [backcolor=transparent]+[backcolor=transparent] [backcolor=transparent]"\n"
- [backcolor=transparent] [backcolor=transparent]+[backcolor=transparent] DATE [backcolor=transparent]+[backcolor=transparent] [backcolor=transparent]"\n"
- [backcolor=transparent] [backcolor=transparent]+[backcolor=transparent] [backcolor=transparent]CanonicalizedHeaders[backcolor=transparent] [backcolor=transparent]+[backcolor=transparent] [backcolor=transparent]"\n"
- [backcolor=transparent] [backcolor=transparent]+[backcolor=transparent] [backcolor=transparent]CanonicalizedResource
上面公式中的\n 表示换行转义字符,+(加号)表示字符串连接操作,其他各个部分定义如下:
CanonicalizedHeaders 的构造方式如下:
- 将所有以x-cms和 x-acs 为前缀的 HTTP 请求头的名字转换成小写字母;
- 将上一步得到的所有 CMS自定义请求头按照字典序进行升序排序;
- 删除请求头和内容之间分隔符两端出现的任何空格;
- 将所有的头和内容用 \n 分隔符组合成最后的 CanonicalizedHeaders。
CanonicalizedResource 的构造方式如下:
- 将 CanonicalizedResource 设置为空字符串(””);
- 放入要访问的URI,如/event/custom/upload
- 如请求包含查询字符串(QUERY_STRING),则在 CanonicalizedResource 字符串尾部添加? 和查询字符串。
其中QUERY_STRING 是 URL 中请求参数按字典序排序后的字符串,其中参数名和值之间用= 相隔组成字符串,并对参数名-值对按照字典序升序排序,然后以 & 符号连接构成字符串。其公式化描述如下:
- [backcolor=transparent]QUERY_STRING [backcolor=transparent]=[backcolor=transparent] [backcolor=transparent]"KEY1=VALUE1"[backcolor=transparent] [backcolor=transparent]+[backcolor=transparent] [backcolor=transparent]"&"[backcolor=transparent] [backcolor=transparent]+[backcolor=transparent] [backcolor=transparent]"KEY2=VALUE2"
第三步 生成请求的数字签名
目前,事件上报只支持一种数字签名算法,即默认签名算法 hmac-sha1。其整个签名公式如下:
- [backcolor=transparent]Signature[backcolor=transparent] [backcolor=transparent]=[backcolor=transparent] base16[backcolor=transparent]([backcolor=transparent]hmac[backcolor=transparent]-[backcolor=transparent]sha1[backcolor=transparent]([backcolor=transparent]UTF8[backcolor=transparent]-[backcolor=transparent]Encoding[backcolor=transparent]-[backcolor=transparent]Of[backcolor=transparent]([backcolor=transparent]SignString[backcolor=transparent]),[backcolor=transparent]AccessKeySecret[backcolor=transparent]))