试图列出Devpay S3存储桶 - 获取“SignatureDoesNotMatch”错误

时间:2011-02-23 23:40:34

标签: php amazon-s3

我正在尝试做什么:
我正在尝试列出Devpay S3存储桶。

我正在使用的参考文献:
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 libcURL库的简单REST GET请求:

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 个答案:

答案 0 :(得分:1)

在S3返回的错误消息中将是一个StringToSign元素(使用View Source可以更清楚地看到它)。仔细比较您要附加的字符串以签署请求 - 它们必须完全相同。