开发者社区> 问答> 正文

阿里云签名计算

阿里云 签名机制 中有这样的说明:

以DescribeDomainRecords为例,签名前的请求URL为:

http://alidns.aliyuncs.com/?Format=XML&AccessKeyId=testid&Action=DescribeDomainRecords&SignatureMethod=HMAC-SHA1&DomainName=example.com&SignatureNonce=f59ed6a9-83fc-473b-9cc6-99c95df3856e&SignatureVersion=1.0&Version=2015-01-09&Timestamp=2016-03-24T16:41:54Z

其中 Timestamp 相关的参数是 :Timestamp=2016-03-24T16:41:54Z

_

而在下面的说明中:

那么StringToSign就是:

GET&%2F&AccessKeyId%3Dtestid%26Action%3DDescribeDomainRecords%26DomainName%3Dexample.com%26Format%3DXML%26SignatureMethod%3DHMAC-SHA1%26SignatureNonce%3Df59ed6a9-83fc-473b-9cc6-99c95df3856e%26SignatureVersion%3D1.0%26Timestamp%3D2016-03-24T16%253A41%253A54Z%26Version%3D2015-01-09

Timestamp 的参数编码后变为:Timestamp%3D2016-03-24T16%253A41%253A54Z%26
%25%的表示,而 %3A:的表示。不应该是Timestamp%3D2016-03-24T16%3A41%3A54Z%26吗?为什么下面将 : 转换成 %253A

_

另外:
签名中的 FromatJSON/XML 区分大小写吗?

展开
收起
测试服 2017-02-07 17:23:59 3749 0
2 条回答
写回答
取消 提交回答
  • 官方没写错,仔细看他的URL规则:
    c) 对编码后的参数名称和值使用英文等号(=)进行连接。
    d) 再把英文等号连接得到的字符串按参数名称的字典顺序依次使用&符号连接,即得到规范化请求字符串。

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

    首先对参数进行第一次编码,第二次构建加密字符串的时候进行二次编码。
    所以,:第一次编码成%3A,第二次编码针对%编码成%25,最终结果就是%253A

    2019-07-17 20:46:16
    赞同 展开评论 打赏
  • 码农|Coder| Pythonista

    第一个应该是官方写错了。

    2019-07-17 20:46:16
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
阿里云云原生 Serverless 技术实践营 PPT 演讲 立即下载
阿里云产品十月刊 立即下载
基于阿里云构建博学谷平台实时湖仓 立即下载