加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

SignatureDoesNotMatch使用ruby aws-sdk gem和presigned pos

发布时间:2020-12-17 02:07:41 所属栏目:百科 来源:网络整理
导读:我需要一些帮助来使新的 ruby AWS S3 SDK 2.0正常工作.我正在使用区域eu-central-1,因此需要对所有请求使用最新的签名方法v4. 实际上我想创建一个预先签名的帖子网址,以便与jquery-fileupload结合使用.我已经使用所有访问密钥,存储桶,CORS配置等正确设置了S3
我需要一些帮助来使新的 ruby AWS S3 SDK 2.0正常工作.我正在使用区域eu-central-1,因此需要对所有请求使用最新的签名方法v4.

实际上我想创建一个预先签名的帖子网址,以便与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'

解决方法

预签名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.这也可能导致问题.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读