2010-11-29 69 views
2

我在寫一個基本的客戶端來訪問Amazon SimpleDB服務,並且在理解請求籤名背後的邏輯時遇到了一些麻煩。SimpleDB HMAC簽署

下面是一個例子請求:

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,能夠告訴我簽名消息背後的邏輯,即參數順序等。文檔在這裏並不是非常具體。

回答

1

對於那些讀了這個問題後,下面是從文檔中相關章節的報價。本節似乎已從SimpleDB文檔中消失,但仍存在於SQS文檔中。它仍然直接適用於SimpleDB。

一個關鍵問題是您必須對所有HTTP參數值進行正確的URL編碼。

  • 不要URL編碼任何未預留字符RFC 3986
    定義。這些未保留的字符是A-Z,a-z,0-9,連字符( - ),下劃線(_),句號(。)和代字號(〜)。

  • 使用%XY對所有其他字符進行百分比編碼,其中X和Y是十六進制字符0-9和大寫字母A-F。

  • 百分比編碼形式%XY%延伸UTF-8字符ZA

  • 百分比編碼空格字符爲%20(而不是+,作爲共通編碼方案一樣)。

一個常見的錯誤涉及失敗來編碼其可出現在兩個數據值和在SelectExpressions的星號(*)。

+0

請注意,流行的在線URL編碼器也不會對星號進行編碼。例如,請參閱:meyerweb.com/eric/tools/dencoder和url-encode-decode.com。 – 2014-08-01 16:03:31