我正在编写一个访问亚马逊SimpleDB服务的基本客户端,但我在理解请求签名背后的逻辑时遇到了一些问题。
下面是一个请求示例:
https://sdb.amazonaws.com/?Action=PutAttributes
&DomainName=MyDomain
&ItemName=Item123
&Attribute.1.Name=Color&Attribute.1.Value=Blue
&Attribute.2.Name=Size&Attribute.2.Value=Med
&Attribute.3.Name=Price&Attribute.3.Value=0014.99
&Version=2009-04-15
&Timestamp=2010-01-25T15%3A01%3A28-07%3A00
&SignatureVersion=2
&SignatureMethod=HmacSHA256
&AWSAccessKeyId=<Your AWS Access Key ID>
Following is the string to sign.要签名的消息:
GET\n
sdb.amazonaws.com\n
/\n
AWSAccessKeyId=<Your AWS Access Key ID>
&Action=PutAttributes
&Attribute.1.Name=Color
&Attribute.1.Value=Blue
&Attribute.2.Name=Size
&Attribute.2.Value=Med
&Attribute.3.Name=Price
&Attribute.3.Value=0014.99
&DomainName=MyDomain
&ItemName=Item123
&SignatureMethod=HmacSHA256
&SignatureVersion=2
&Timestamp=2010-01-25T15%3A01%3A28-07%3A00
&Version=2009-04-15以下是已签名的请求。
https://sdb.amazonaws.com/?Action=PutAttributes
&DomainName=MyDomain
&ItemName=Item123
&Attribute.1.Name=Color&Attribute.1.Value=Blue
&Attribute.2.Name=Size&Attribute.2.Value=Med
&Attribute.3.Name=Price&Attribute.3.Value=0014.99
&Version=2009-04-15
&Timestamp=2010-01-25T15%3A01%3A28-07%3A00
&Signature=<URLEncode(Base64Encode(Signature))>
&SignatureVersion=2
&SignatureMethod=HmacSHA256
&AWSAccessKeyId=<Your AWS Access Key ID>我不明白的是要签名的消息。为什么我不明白呢?那么,参数顺序在请求和要签名的消息之间完全改变了。在该示例中,可能参数是按字母顺序排序的。
有没有人使用过SimpleDB来告诉我要签名的消息背后的逻辑是什么,例如参数顺序等。文档在这里并不是很具体。
发布于 2010-11-29 11:01:30
来回答我自己的问题。
答案隐藏在文档中。我是对的,我要先对参数进行排序。
http://docs.amazonwebservices.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/index.html?Query_QueryAuth.html
发布于 2010-11-30 00:03:36
对于稍后阅读此问题的读者,下面是对文档中相关部分的引用。这一部分似乎已经从SimpleDB文档中消失了,但仍然存在于SQS文档中。它仍然直接适用于SimpleDB。
一个关键问题是,您必须对所有HTTP参数值进行正确的URL编码。
定义。
一个常见的错误是无法对星号字符(*)进行编码,星号字符可能同时出现在数据值和SelectExpressions中。
https://stackoverflow.com/questions/4300493
复制相似问题