2011-02-23 106 views
0

我在做什麼:
我試圖列出Devpay S3存儲桶。試圖列出Devpay S3存儲桶 - 獲取「SignatureDoesNotMatch」錯誤

引用我使用的是:
1. http://docs.amazonwebservices.com/AmazonS3/latest/API/RESTServiceGET.html
2. http://docs.amazonwebservices.com/AmazonDevPay/latest/DevPayDeveloperGuide/QuickReferenceS3Products.html
3. http://docs.amazonwebservices.com/AmazonDevPay/2007-12-01/DevPayDeveloperGuide/DesktopAWSCalls.html

我如何做:
使用PHP一個簡單的REST的GET請求libcURL庫:

GET/HTTP/1.1 
Host: s3.amazonaws.com 
Date: $date 
X-Amz-Date: $date 
X-Amz-Security-Token: $userToken, $productToken 
Authorization: $signatureValue 

哪裏

$date // = timestamp at the time of request 

$signatureValue //= Authorization: AWS $signature 

$signature //= $userAccessKey:$signatureString 

$signatureString //=base64 encoded HMAC-SHA1 of $stringToSign with $userSecretKey 

$stringToSign //= utf8 encoded string: 

這個字符串 -

GET\n 
""\n 
""\n 
$date\n 
$canonicalized_AMZ_Headers\n 
/

我使用curl_exec()執行GET請求。

錯誤,那是我得到:

「SignatureDoesNotMatch」

「我們計算了不符合您所提供的簽名檢查你的密鑰和簽名方法請求籤名。」

謝謝!
任何幫助將不勝感激

回答

1

從S3返回的錯誤消息將是一個StringToSign元素(使用查看源更清楚地看到它)。仔細比較這個字符串,你在一起簽署請求—他們必須是正好相同。

+0

S3返回的字符串中沒有'$ date' ...所以我刪除它。比較我的'$ stringToSign'和亞馬遜返回的StringToSign - 兩者似乎都是一樣的;不幸的是,錯誤也是如此: – 2011-02-24 18:39:19

+0

簽名的S3 URLs應該包含過期時間,過期時間也需要設置爲查詢參數,請參見[認證頁面](http://docs.amazonwebservices.com/AmazonS3/latest /dev/RESTAuthentication.html),我不是一個PHP的傢伙(或者Devpay的人),但是AWS發佈了一個[PHP SDK](http://aws.amazon.com/sdkforphp/ )HTH – 2011-02-25 04:56:49

+0

感謝烏利亞 - 我沒有使用簽名的URL,通過排除x-amz-date標題和包含常規的「Date:」,我能夠解決這個問題。 ..「'標題,而且兩個安全令牌需要分別列出,當不是在規範化的形式 ps的PHP SDK不幸的是不會與devpay S3的桶:( - 感謝您的所有輸入 – 2011-02-26 02:26:13

相關問題