首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SimpleDB HMAC签名

SimpleDB HMAC签名
EN

Stack Overflow用户
提问于 2010-11-29 10:51:36
回答 2查看 249关注 0票数 2

我正在编写一个访问亚马逊SimpleDB服务的基本客户端,但我在理解请求签名背后的逻辑时遇到了一些问题。

下面是一个请求示例:

代码语言:javascript
复制
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.

要签名的消息:

代码语言:javascript
复制
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

以下是已签名的请求。

代码语言:javascript
复制
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来告诉我要签名的消息背后的逻辑是什么,例如参数顺序等。文档在这里并不是很具体。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-11-29 11:01:30

来回答我自己的问题。

答案隐藏在文档中。我是对的,我要先对参数进行排序。

http://docs.amazonwebservices.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/index.html?Query_QueryAuth.html

票数 4
EN

Stack Overflow用户

发布于 2010-11-30 00:03:36

对于稍后阅读此问题的读者,下面是对文档中相关部分的引用。这一部分似乎已经从SimpleDB文档中消失了,但仍然存在于SQS文档中。它仍然直接适用于SimpleDB。

一个关键问题是,您必须对所有HTTP参数值进行正确的URL编码。

  • 不对RFC3986的任何非保留字符进行URL编码

定义。

  • 这些非保留字符是A-Z、a-z、0-9、连字符(- )、下划线(_ )、句点(.)和代字号(~)。

  • Percent使用%XY对所有其他字符进行编码,其中X和Y是十六进制字符0-9,大写为A-F。

  • Percent以%XY%ZA

  • Percent的形式对扩展的

  • -8字符进行编码,将空格字符编码为%20 (而不是像常见编码方案那样使用+ )。

一个常见的错误是无法对星号字符(*)进行编码,星号字符可能同时出现在数据值和SelectExpressions中。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4300493

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档