【问题标题】:SignatureDoesNotMatch using ruby aws-sdk gem and presigned posSignatureDoesNotMatch 使用 ruby​​ aws-sdk gem 和 presigned pos
【发布时间】:2015-02-05 14:24:52
【问题描述】:

我需要一些帮助才能让新的 ruby​​ AWS S3 SDK 2.0 正常工作。我使用的是eu-central-1区域,所以所有请求都需要使用最新的签名方法v4

实际上我想创建一个预签名的帖子 url 以将其与 jquery-fileupload 结合使用。我已经使用所有访问密钥、存储桶、CORS 配置等正确设置了 S3。但是每次我使用以下代码生成 url 时

@signer = Aws::S3::Presigner.new
@url = @signer.presigned_url(:put_object, bucket: ENV['S3_BUCKET_NAME'], key: "documents/#{SecureRandom.uuid}/${filename}", acl: :public_read)

创建以下 URL

https://project-xxxxx-staging.s3.eu-central-1.amazonaws.com/documents/a253feb0-4c60-4735-8d95-4649c0d3dcb5/%24%7Bfilename%7D?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAJVY57LY6XGIRIRHQ%2F20150205%2Feu-central-1%2Fs3%2Faws4_request&X-Amz-Date=20150205T140425Z&X-Amz-Expires=900&X-Amz-SignedHeaders=host&x-amz-acl=public_read&X-Amz-Signature=ff2fbe233ed7380dc745aa7ba37421d7d8703db0d67208541e500367262a8c51

我收到以下错误

<Code>SignatureDoesNotMatch</Code>
<Message>The request signature we calculated does not match the signature you provided. Check your key and signing method.</Message>

有人知道如何解决这个问题或对潜在问题有任何提示吗?

我正在使用的环境:

ruby '2.2.0' 
gem 'rails', '4.2.0' 
gem 'aws-sdk', '~> 2.0.21.pre'

【问题讨论】:

    标签: ruby amazon-s3 aws-sdk


    【解决方案1】:

    预签名的 URL 包含根据将/应该发送的标头和查询参数计算的签名。可能发生的情况是 jquery 上传程序添加了 Amazon S3 需要签名的标头(例如 Content-Type)。在构建预签名 url 时,您需要预先指定此内容类型:

    signer = Aws::S3::Presigner.new signer.presigned_url(:put_object, bucket:'name', key:'key', acl:'public-read', content_type:'...')

    另外,正确的预设 ACL 是“public-read”,而不是 :public_read。这也可能导致问题。

    【讨论】:

      猜你喜欢
      • 2012-04-20
      • 2016-10-12
      • 1970-01-01
      • 1970-01-01
      • 2014-07-07
      • 1970-01-01
      • 1970-01-01
      • 2016-07-14
      • 2018-11-21
      相关资源
      最近更新 更多