获取预签名 url 时,aws s3 c# 中的SignatureDoesNotMatch

问题描述 投票:0回答:3
嗨,我有一个 mvc 应用程序,我想在 amazon s3 中获取上传图像的 url,但在获取 url 后,它无法在浏览器中打开 获取Url的代码是

var expiryUrlRequest = new GetPreSignedUrlRequest(); expiryUrlRequest.BucketName = BUCKET_NAME; expiryUrlRequest.Key = "uploads/participantid_" + v1+ "/taskid_" + v2 + "/" + 0 + ".mp4"; expiryUrlRequest.ContentType = "Video/mp4"; expiryUrlRequest.Expires = DateTime.Now.AddYears(10); string url = client.GetPreSignedURL(expiryUrlRequest);

我也得到了网址,但将其放入浏览器后,它显示签名不匹配。

c# asp.net-mvc amazon-web-services file-upload amazon-s3
3个回答
2
投票
一些建议:

    指定动词: expiryUrlRequest.Verb = HttpVerb.GET;
  1. 检查存储桶策略是否允许您用于访问此存储桶的 IAM 角色/AWS 账户访问该存储桶(使用工具:
  2. https://awspolicygen.s3.amazonaws.com/policygen.html )
  3. 使用小于 7 天的有效期(无助于解决此问题,但允许的最大值为 7 天)
  4. 尝试将 ContentType 设置为“video/mp4”(值得一试)。

0
投票
生成预签名 URL 并绑定到 html 后。十六进制值的签名正在更改为 asci 符号。

确保为不带十六进制值的预签名 URL 创建签名


0
投票
在为 s3 生成预签名 url 时,我看到了同样的错误

SignatureDoesNotMatch

我们计算出的请求签名与您的签名不符 假如。检查您的密钥和签名方法。

我将源代码中的 AWS S3 .NET SDK 升级到当前版本后出现此问题。

    需要修改 GetPreSignedUrlRequest 对象,以便 Bucket 键没有任何后缀的子目录。
  • 然后将子目录添加到文件名 Key 的前缀。
不幸的是,仍然产生了错误......

从 GetPreSignedUrlRequest 对象中注释掉 Verb 键(包括之前的更改)后,它开始正常工作。

var request = new GetPreSignedUrlRequest { BucketName = bucketName, Key = objectKey, Expires = DateTime.UtcNow.AddHours(duration), };
这个 

AWS 代码示例帮助我找到了问题。

© www.soinside.com 2019 - 2024. All rights reserved.