【问题标题】:SignatureDoesNotMatch in aws s3 c# while getting presigned url在获取预签名网址时,AWS s3 c#中的SignatureDoesNotMatch
【发布时间】:2016-11-25 06:25:21
【问题描述】:

嗨,我有 mvc 应用程序,我想在亚马逊 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);

我也得到了 url,但是在将其粘贴到浏览器中后,它显示签名不匹配。

【问题讨论】:

  • 您能粘贴您的 GetPreSignedUrlRequest 代码吗?
  • 它已经是亚马逊实现的方法,我们只需将 expiryUrlRequest 对象发送到该方法即可。
  • SDK的版本是多少?
  • V3.1.6.2 for AWSSDDK.S3 和 AWSSDK.CORE 它是 v3.1.6
  • 如果使用的是 Signature V4,预签名 URL 的最长有效期为 7 天,但我预计会出现不同的错误。 var data = expiryUrlRequest.Metadata; 的作用是什么?并且您不需要在某处指定与该 URL 关联的方法在您使用它时将是GET 吗? (请求方法是规范请求的一部分,在生成签名时使用)。

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


【解决方案1】:

一些建议:

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

【讨论】:

    【解决方案2】:

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

    确保为没有十六进制值的预签名网址创建签名

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-10-09
      • 1970-01-01
      • 1970-01-01
      • 2023-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-05
      相关资源
      最近更新 更多