目前,事件上报只支持一种数字签名算法,即默认签名算法 hmac-sha1

准备可用的阿里云访问秘钥

给 API 请求生成签名,需使用一对访问秘钥(AccessKeyId/AccessKeySecret)。您可以使用已经存在的访问秘钥对,也可以创建新的访问秘钥对,但需要保证使用的秘钥对处在启用状态。

生成请求的签名字符串

API 签名字符串由 HTTP 请求中的 MethodHeaderBody 信息一同生成。

SignString = VERB + "\n"
             + CONTENT-MD5 + "\n"
             + CONTENT-TYPE + "\n"
             + DATE + "\n"
             + CanonicalizedHeaders + "\n"
             + CanonicalizedResource

上面公式中的\n 表示换行转义字符,+(加号)表示字符串连接操作,其他各个部分定义如下:

名称 定义 示例
VERB HTTP 请求的方法名称 PUT、GET、POST 等
CONTENT-MD5 HTTP 请求中 Body 部分的 MD5 值(必须为大写字母串) 875264590688CA6171F6228AF5BBB3D2
CONTENT-TYPE HTTP 请求中 Body 部分的类型 application/json
DATE HTTP请求中的标准时间戳头(遵循 RFC 1123 格式,使用 GMT 标准时间) Mon, 3 Jan 2010 08:33:47 GMT
CanonicalizedHeaders 由 HTTP 请求中以 x-cms 和 x-acs为前缀的自定义头构造的字符串 x-cms-api-version:0.1.0\nx-cms-signature
CanonicalizedResource 由 HTTP 请求资源构造的字符串(具体构造方法见下面详述) /event/custom/upload
上表中CanonicalizedHeaders 的构造方式如下:
  1. 将所有以x-cmsx-acs 为前缀的 HTTP 请求头的名字转换成小写字母。
  2. 将上一步得到的所有 CMS自定义请求头按照字典序进行升序排序。
  3. 删除请求头和内容之间分隔符两端出现的任何空格。
  4. 将所有的头和内容用 \n 分隔符组合成最后的 CanonicalizedHeaders。

上表中CanonicalizedResource 的构造方式如下:

  1. 将 CanonicalizedResource 设置为空字符串(””)。
  2. 放入要访问的URI,如/event/custom/upload
  3. 如请求包含查询字符串(QUERY_STRING),则在 CanonicalizedResource 字符串尾部添加 和查询字符串。

    其中QUERY_STRING 是 URL 中请求参数按字典序排序后的字符串,其中参数名和值之间用= 相隔组成字符串,并对参数名-值对按照字典序升序排序,然后以 & 符号连接构成字符串。其公式化描述如下。

    QUERY_STRING = "KEY1=VALUE1" + "&" + "KEY2=VALUE2"

生成请求的数字签名

默认签名算法 hmac-sha1,整个签名公式如下:
Signature = base16(hmac-sha1(UTF8-Encoding-Of(SignString),AccessKeySecret))