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

签名机制

更新时间:2018-04-02 11:15:36

用户在HTTP或HTTPS请求中添加签名(Signature)信息,阿里云才可以对请求进行身份验证。签名需要使用AccessKey,由AccessKey ID和AccessKey Secret组成。用户可通过阿里云官方网站申请和管理AccessKey ID和AccessKey Secret。

签名步骤

  1. 构造规范化的请求字符串

    1. 按照字母升序,对参数名称进行排序。排序的参数包括公共请求参数和要调用的接口的指定参数。

      说明:当使用GET方法提交请求时,这些参数就是请求URI中的参数部分(即URI中“?”之后由“&”连接的部分)。

    2. 对每个请求参数的名称和值进行URL编码。使用UTF-8字符集进行编码,编码规则是:

      • 对于字符 A-Z、a-z、0-9以及字符“-”、“_”、“.”、“~”不编码;
      • 对于其他字符编码成“%XY”的格式,其中XY是字符对应ASCII码的16进制表示。比如英文的双引号(”)对应的编码就是%22.
      • 英文空格( )编码为%20,而不是加号(+)。

        说明:一般支持URL编码的库(比如Java中的java.net.URLEncoder)都是按照“application/x-www-form-urlencoded”的MIME类型的规则进行编码的。实现时可以直接使用这类方式进行编码,把编码后的字符串中加号(+)替换成%20、星号(*)替换成%2A、%7E替换回波浪号(~),即可得到上述规则描述的编码字符串。

    3. 对编码后的参数名称和值使用英文等号(=)进行连接。

    4. 再把英文等号连接得到的字符串按参数名称的字典顺序依次使用&符号连接,即得到规范化请求字符串。

      使用上一步构造的规范化字符串按照下面的规则构造用于计算签名的字符串:

      1. StringToSign=
      2. HTTPMethod + “&” +
      3. percentEncode(“/”) + ”&” +
      4. percentEncode(CanonicalizedQueryString)

      其中HTTPMethod是提交请求用的HTTP方法,比GET。percentEncode(“/”)是按照前文描述的URL编码规则对字符“/”进行编码得到的值,即“%2F”。

      percentEncode(CanonicalizedQueryString)是对第1步中构造的规范化请求字符串按1.b中描述的URL编码规则编码后得到的字符串。

  2. 按照RFC2104的定义,使用上面的用于签名的字符串计算签名HMAC值。注意:计算签名时使用的Key就是用户持有的Access Key Secret并加上一个“&”字符(ASCII:38),使用的哈希算法是SHA1。

  3. 按照Base64编码规则把上面的HMAC值编码成字符串,即得到签名值(Signature)。

  4. 将得到的签名值作为Signature参数添加到请求参数中,即完成对请求签名的过程。注意:得到的签名值在作为最后的请求参数值提交给RAM服务器的时候,要和其他参数一样,按照RFC3986的规则进行URL编码)。

示例

CreateTrail为例。签名前的请求URL为:

  1. http://actiontrail.cn-hangzhou.aliyuncs.com/actiontrail?SignatureVersion=1.0
  2. &OssBucketName=yuanchuang
  3. &Name=CreateTest
  4. &Format=JSON
  5. &Timestamp=2015-12-01T08%3A23%3A31Z
  6. &AccessKeyId=testid
  7. &SignatureMethod=HMAC-SHA1
  8. &Version=2015-09-28
  9. &RoleName=aliyunactiontraildefaultrole
  10. &Action=CreateTrail
  11. &OssKeyPrefix=

对应的StringToSign是:

  1. GET&%2F&AccessKeyId%3Dtestid&Action%3DCreateTrail&Format%3DJSON&Name%3DCreateTest&OssBucketName%3Dyuanchuang&OssKeyPrefix%3D&RoleName%3Daliyunactiontraildefaultrole&SignatureMethod%3DHMAC-SHA1&SignatureNonce%3Dce999197-9804-11e5-abfe-7831c1c8022e&SignatureVersion%3D1.0&Timestamp%3D2015-12-01T08%253A23%253A31Z&Version%3D2015-09-28

假如使用的AccessKey Id是testid,AccessKey Secret是testsecret,则用于计算HMAC的Key是testsecret&。计算得到的签名值是:

  1. vAeYfUeJUctqeqQGUkFITGnFAeo=

签名后的请求URL为:

  1. http://actiontrail.cn-hangzhou.aliyuncs.com/actiontrail?SignatureVersion=1.0
  2. &OssBucketName=yuanchuang
  3. &Name=CreateTest
  4. &Format=JSON
  5. &Timestamp=2015-12-01T08%3A23%3A31Z
  6. &Signature=vAeYfUeJUctqeqQGUkFITGnFAeo%3D
  7. &AccessKeyId=testid
  8. &SignatureMethod=HMAC-SHA1
  9. &Version=2015-09-28
  10. &RoleName=aliyunactiontraildefaultrole
  11. &Action=CreateTrail
  12. &SignatureNonce=ce999197-9804-11e5-abfe-7831c1c8022e
  13. &OssKeyPrefix=
本文导读目录