2015-08-20 153 views
1

我想使用這個網址在這裏提到的亞馬遜產品API獲取產品相關的數據:亞馬遜Web服務簽名問題

http://docs.aws.amazon.com/AWSECommerceService/latest/DG/ItemLookup.html

項目查找網址:

http://webservices.amazon.com/onca/xml?Service=AWSECommerceService&AWSAccessKeyId=[AWS_Access_Key_ID]&Operation=ItemLookup&ItemId=B00008OE6I&Timestamp=[YYYY-MM-DDThh:mm:ssZ]&Signature=[Request_Signature] 

我已經進入需要URL中的詳細信息/參數,但我無法理解從何處獲取此簽名或如何生成此簽名?任何幫助,將不勝感激。

+0

http://docs.aws.amazon.com/AWSECommerceService/latest/DG/HMACAuth_ItemsRequired.html _A簽名是通過使用請求中的每個參數的請求類型,域,URI和有序字符串創建的(除簽名參數本身外)採用以下格式 = &。一旦格式正確,您就可以使用AWS密鑰創建base64編碼的HMAC_SHA256簽名._ –

回答

0

最簡單和最快的方式是使用AWS SDK之一。您可以在此處找到完整列表:https://aws.amazon.com/tools/

當您使用SDK時,您只需提供您的訪問密鑰和密鑰。圖書館處理準備簽名。

+0

我已經使用了AWS SDK,但只返回您自己添加的產品詳細信息。而在我的情況下,我想訪問所有在亞馬遜上的公共產品的詳細信息。我需要一個API或可以返回產品詳細信息的東西 –

+0

如果您已經可以使用API​​,那麼我不會看到它與簽名有何關係。 –

+0

請參閱我希望API能夠在亞馬遜上獲取公共產品。這個AWS SDK基本上幫不了我。它可以幫助我獲取已上傳的S3相關內容,但這不是我正在尋找的內容。 我需要一個可以獲取產品和他們的細節是這樣的一個API: http://www.amazon.com/s/ref=nb_sb_noss_2?url=search-alias%3Dappliances&field-keywords=television 現在這裏列出的產品。這些是我通過API需要的。 –

0

那麼,一旦擁有SDK,在Ruby中自己做這件事就毫無意義了,但是對於簽名過程的解釋可能對某些人有用。

簽名是AWS驗證API請求的方式。它作爲查詢字符串參數傳遞給您的HTTP請求,並根據您自己的請求內容和您在服務器端的憑據進行驗證。

有2個版本:2和4,解釋爲herehere。新版區域(中國和法蘭克福)不支持版本2。

在2版本,我更熟悉,基於這種格式的字符串生成的簽名:

HTTPVerb + "\n" + ValueOfHostHeaderInLowercase + "\n" + HTTPRequestURI 
+ "\n" + CanonicalizedQueryString 

CanonicalizedQueryString是您的查詢字符串,用排序參數(UTF- 8字節順序)由參數名稱和參數值url編碼。

然後你(這取決於您的查詢字符串參數指定是SignatureMethod其中之一計算該字符串的HMAC,使用AWS密鑰SHA256SHA1作爲哈希算法),並將其編碼爲base64。所有這些的結果將是簽名參數的值。

我將嘗試引導您通過CloudWatch請求,使用bash工具手動生成該請求。

假設您想列出您的CloudWatch度量標準。請求(沒有簽名)將如下所示。

http://monitoring.amazonaws.com/?AWSAccessKeyId=AVUKYAMNIIGWALNMA6IG&Action=ListMetrics&SignatureMethod=HmacSHA1&SignatureVersion=2&Timestamp=2015-08-20T22%3A40%3A00.000Z&Version=2010-08-01 

所以,你的串籤將是:

GET 
monitoring.amazonaws.com 
/
AWSAccessKeyId=AVUKYAMNIIGWALNMA6IG&Action=ListMetrics&SignatureMethod=HmacSHA1&SignatureVersion=2&Timestamp=2015-08-20T22%3A40%3A00.000Z&Version=2010-08-01 

好吧,讓我們把它放在一個變量,做所有的魔法(HMAC +的base64)

#!/bin/bash 

# your secret key 
key='ry+SyjvXLvi4lYie/QfZYnxYOBQDggf01DTUxFSK' 

# using 'read' to assign the signing string 
# to a variable for readability reasons 
read -r -d '' payload <<EOF 
GET 
monitoring.amazonaws.com 
/
AWSAccessKeyId=AVUKYAMNIIGWALNMA6IG\ 
&Action=ListMetrics\ 
&SignatureMethod=HmacSHA1\ 
&SignatureVersion=2&\ 
Timestamp=2015-08-20T22%3A40%3A00.000Z\ 
&Version=2010-08-01 
EOF 

echo -n "$payload" | openssl dgst -sha256 -hmac $key -binary | openssl enc -base64 

然後,畢竟,你會結束了這樣的事情:

xr IYF8wO0C8YOQgcdpq6MoJpBWzXEWxuTBAAoqYoGWM =

這是你的簽名,最後,你只需要URL編碼它並將它添加到您的要求爲一體的多個查詢字符串參數。

&簽名= xrIYF8wO0C8YOQgcdpq6MoJpBWzXEWxuTBAAoqYoGWM%3D

我們希望,如果你正確地做了一切(把符號串起來,生成散列並將其編碼),您的請求將會被接受,如果你有足夠的權限,執行。

所以,正如你所看到的,這是不值得自己去做的事情。使用SDK。 ;)

0

謝謝你們的回覆。但我終於想通了,我的問題,我的解決辦法是在這種寶石:

https://github.com/jugend/amazon-ecs 

這就是我其實是在尋找它終於幫我實現了我的努力。在這裏發佈,以便人們可以找到更好的解決方案。