尝试访问Amazon s3上的文件时出现SignatureDoesNotMatch错误

时间:2014-01-14 20:20:16

标签: c# amazon-web-services amazon-s3 asp.net-mvc-5

我正在尝试使用 GetPreSignedUrlRequest 方法访问已上传到Amazon S3的文件。我使用的代码如下: -

string bucketName = string.Empty;
if (ConfigurationManager.AppSettings["S3BucketName"] != null)
{
       bucketName = ConfigurationManager.AppSettings["S3BucketName"].ToString();
}
AmazonS3Client s3Client = new AmazonS3Client(Amazon.RegionEndpoint.USEast1);
GetPreSignedUrlRequest request = new GetPreSignedUrlRequest
{
     BucketName = bucketName,
     Key = file.FileName,
     Expires = DateTime.Now.AddMinutes(5),
     Protocol = Protocol.HTTP
};
string url = s3Client.GetPreSignedURL(request);

然后使用此生成的url指向该文件。 看起来像 http://s3.amazonaws.com/mybucketname/VZcbKsZgR2qyOMkLU1XT_jquery_ui_touch-punch_min_js.txt?X-Amz-Expires=300&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIMGQJ6D5L5SNBGHA/20140114/us-east-1/s3/aws4_request&X-Amz-Date=20140114T194159Z&X-Amz-SignedHeaders=host&X-Amz-Signature=922719dd2286600aebaca5701a8e142d327342b541569c9a4d7d8afc822d9a76/VZcbKsZgR2qyOMkLU1XT_jquery_ui_touch-punch_min_js.txt

但是这给我的签名不匹配错误,如下图所示: -

Signature does not match

2 个答案:

答案 0 :(得分:0)

更新 - 1月16日发布的SDK版本2.0.6,包含针对此问题的修复程序。

您的代码很好,遗憾的是SDK中的错误导致预先指定的网址格式错误。我刚刚使用我们最新的代码库测试了它,我们已经解决了这个问题;这个新版本应该很快发布。

我们会在发布补丁后ping这个问题。很抱歉给您带来不便。

此致

答案 1 :(得分:0)

如果未正确设置有关请求的某些详细信息,也会发生这种情况:

e.g。对我来说,以下几行解决了问题

        request1.ContentType = "image/jpeg";
        request1.Verb = HttpVerb.PUT;