阿里云 签名机制 中有这样的说明:
以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
?
_
另外:
签名中的 Fromat
值 JSON/XML
区分大小写吗?
官方没写错,仔细看他的URL规则:
c) 对编码后的参数名称和值使用英文等号(=)进行连接。
d) 再把英文等号连接得到的字符串按参数名称的字典顺序依次使用&符号连接,即得到规范化请求字符串。
percentEncode(CanonicalizedQueryString)是对第 1 步中构造的规范化请求字符串按 1.b 中描述的 URL 编码规则编码后得到的字符串。
首先对参数进行第一次编码,第二次构建加密字符串的时候进行二次编码。
所以,:第一次编码成%3A,第二次编码针对%编码成%25,最终结果就是%253A
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。