日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

簽名機(jī)制

為保證API的安全調(diào)用,在調(diào)用API時阿里云會對每個API請求通過簽名(Signature)進(jìn)行身份驗(yàn)證。無論使用HTTP還是HTTPS協(xié)議提交請求,都需要在請求中包含簽名信息。

概述

RPC API要按以下格式在API請求的Query中增加簽名(Signature)。

https://Endpoint/?SignatureVersion=1.0&SignatureMethod=HMAC-SHA1&Signature=CT9X0VtwR86fNWSnsc6v8YGOjuE%3D&SignatureNonce=3ee8c1b8-83d3-44af-a94f-4e0ad82fd6cf
其中:
  • SignatureMethod:簽名方式,目前支持HMAC-SHA1。
  • SignatureVersion:簽名算法版本,目前版本是1.0。
  • SignatureNonce:唯一隨機(jī)數(shù),用于防止網(wǎng)絡(luò)重放攻擊。用戶在不同請求間要使用不同的隨機(jī)數(shù)值,建議使用通用唯一識別碼UUID(Universally Unique Identifier)。
  • Signature:使用AccessKey Secret對請求進(jìn)行對稱加密后生成的簽名。
簽名算法遵循RFC 2104 HMAC-SHA1規(guī)范,使用AccessKey Secret對編碼、排序后的整個請求串計(jì)算HMAC值作為簽名。簽名的元素是請求自身的一些參數(shù),由于每個API請求內(nèi)容不同,所以簽名的結(jié)果也不盡相同。可參考本文的操作步驟,計(jì)算簽名值。
Signature = Base64( HMAC-SHA1( AccessKey Secret, UTF-8-Encoding-Of(StringToSign)) )

步驟一:構(gòu)造待簽名字符串

  1. 使用請求參數(shù)構(gòu)造規(guī)范化的請求字符串(Canonicalized Query String)。
    1. 按照參數(shù)名稱的字典順序?qū)φ埱笾兴械恼埱髤?shù)(包括公共請求參數(shù)和接口的自定義參數(shù),但不包括公共請求參數(shù)中的Signature參數(shù))進(jìn)行排序。
      說明 當(dāng)使用GET方法提交請求時,這些參數(shù)就是請求URI中的參數(shù)部分,即URI中“?”之后由“&”連接的部分。
    2. 對排序之后的請求參數(shù)的名稱和值分別用UTF-8字符集進(jìn)行URL編碼。編碼規(guī)則請參考下表。
      字符編碼方式
      A~Z、a~z和0~9以及“-”、“_”、“.”和“~”不編碼。
      其它字符編碼成 %XY 的格式,其中 XY 是字符對應(yīng)ASCII碼的16進(jìn)制表示。例如英文的雙引號(")對應(yīng)的編碼為 %22
      擴(kuò)展的UTF-8字符編碼成 %XY%ZA…的格式。
      英文空格編碼成 %20,而不是加號(+)。
      該編碼方式和一般采用的application/x-www-form-urlencodedMIME格式編碼算法(例如Java標(biāo)準(zhǔn)庫中的java.net.URLEncoder的實(shí)現(xiàn))存在區(qū)別。編碼時可以先用標(biāo)準(zhǔn)庫的方式進(jìn)行編碼,然后把編碼后的字符串中的加號(+)替換成%20,星號(*)替換成%2A,%7E替換回波浪號(~),即可得到上述規(guī)則描述的編碼字符串。本算法可以用下面的percentEncode方法來實(shí)現(xiàn):
      private static final String ENCODING = "UTF-8";
      private static String percentEncode(String value) throws UnsupportedEncodingException 
      {
      return value != null ? URLEncoder.encode(value, ENCODING).replace("+", "%20").replace("*", "%2A").replace("%7E", "~") : null;
      }
    3. 將編碼后的參數(shù)名稱和值用英文等號(=)進(jìn)行連接。
    4. 將等號連接得到的參數(shù)組合按順序依次使用“&”符號連接,即得到規(guī)范化請求字符串。
  2. 將構(gòu)造的規(guī)范化字符串按照下面的規(guī)則構(gòu)造成待簽名的字符串。
    StringToSign=
          HTTPMethod + "&" +
          percentEncode("/") + "&" +
          percentEncode(CanonicalizedQueryString)

    其中:

    • HTTPMethod 是提交請求用的HTTP方法,例如GET。
    • percentEncode("/") 是按照URL編碼規(guī)則對字符“/”進(jìn)行編碼得到的值,即%2F。
    • percentEncode(CanonicalizedQueryString) 是對構(gòu)造的規(guī)范化請求字符串按URL編碼規(guī)則編碼后得到的字符串。

步驟二:計(jì)算簽名值

  1. 按照RFC2104的定義,計(jì)算待簽名字符串(StringToSign)的HMAC值。
    說明 計(jì)算簽名時使用的Key就是您持有的AccessKey Secret并加上一個“&”字符(ASCII:38), 使用的哈希算法是SHA1。
  2. 按照Base64編碼規(guī)則把上面的HMAC值編碼成字符串,即得到簽名值(Signature)。
  3. 將得到的簽名值作為Signature參數(shù)添加到請求參數(shù)中。
    說明 得到的簽名值在作為最后的請求參數(shù)值提交時要和其它參數(shù)一樣,按照RFC3986的規(guī)則進(jìn)行URL編碼。

示例

CreateTrail為例,簽名前的請求URL為:

https://actiontrail.cn-hangzhou.aliyuncs.com/?AccessKeyId=testid&Action=CreateTrail&Format=JSON&Name=test&RegionId=cn-hangzhou&RoleName=AliyunServiceRoleForActionTrail&SignatureMethod=HMAC-SHA1&SignatureNonce=d7730860-e66f-11ea-a3a5-d5f3b52e66a1&SignatureVersion=1.0&Timestamp=2020-08-25T01%3A11%3A01Z&Version=2017-12-04

對應(yīng)的StringToSign是:

POST&%2F&AccessKeyId%3Dtestid%26Action%3DCreateTrail%26Format%3DJSON%26Name%3Dtest%26RegionId%3Dcn-hangzhou%26RoleName%3DAliyunServiceRoleForActionTrail%26SignatureMethod%3DHMAC-SHA1%26SignatureNonce%3Dd7730860-e66f-11ea-a3a5-d5f3b52e66a1%26SignatureVersion%3D1.0%26Timestamp%3D2020-08-25T01%25253A11%25253A01Z%26Version%3D2017-12-04

例如:AccessKey ID為:testid,AccessKeySecret為:testsecret,則用于計(jì)算HMAC的key為:testsecret&。

計(jì)算得到的簽名值為:d15sJSZ0cc+y6a6FHlWxGK/qcUA=。

簽名后的請求URL為:

https://actiontrail.cn-hangzhou.aliyuncs.com/?Signature=d15sJSZ0cc+y6a6FHlWxGK/qcUA=&AccessKeyId=testid&Action=CreateTrail&Format=JSON&Name=test&RegionId=cn-hangzhou&RoleName=AliyunServiceRoleForActionTrail&SignatureMethod=HMAC-SHA1&SignatureNonce=d7730860-e66f-11ea-a3a5-d5f3b52e66a1&SignatureVersion=1.0&Timestamp=2020-08-25T01%3A11%3A01Z&Version=2017-12-04