全部产品
弹性计算 会员服务 网络 安全 移动云 数加·大数据分析及展现 数加·大数据应用 管理与监控 云通信 阿里云办公 培训与认证 更多
存储与CDN 数据库 域名与网站(万网) 应用服务 数加·人工智能 数加·大数据基础服务 互联网中间件 视频服务 开发者工具 解决方案 物联网 智能硬件
云监控

签名算法

更新时间:2017-12-12 14:15:41

签名API请求

第一步:准备可用的阿里云访问秘钥

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

第二步: 生成请求的签名字符串

API 签名字符串由 HTTP 请求中的 Method,Header 和 Body 信息一同生成,具体方式如下:

  1. SignString = VERB + "\n"
  2. + CONTENT-MD5 + "\n"
  3. + CONTENT-TYPE + "\n"
  4. + DATE + "\n"
  5. + CanonicalizedHeaders + "\n"
  6. + 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 中请求参数按字典序排序后的字符串,其中参数名和值之间用= 相隔组成字符串,并对参数名-值对按照字典序升序排序,然后以 & 符号连接构成字符串。其公式化描述如下:

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

第三步 生成请求的数字签名

目前,事件上报只支持一种数字签名算法,即默认签名算法 hmac-sha1。其整个签名公式如下:

  1. Signature = base16(hmac-sha1(UTF8-Encoding-Of(SignString),AccessKeySecret))
本文导读目录