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

ruby-on-rails – 使用Fog AWS S3和Rails时获得负到期

发布时间:2020-12-17 02:24:58 所属栏目:百科 来源:网络整理
导读:我正在尝试使用 Fog为S3中的文件生成已签名的URL;但是,返回的url总是返回负到期,导致url为400. connection = Fog::Storage.new( region: 'us-west-1',provider: 'AWS',aws_access_key_id: ENV['AWS_ACCESS_KEY'],aws_secret_access_key: ENV['AWS_SECRET_KEY
我正在尝试使用 Fog为S3中的文件生成已签名的URL;但是,返回的url总是返回负到期,导致url为400.

connection = Fog::Storage.new(
  region: 'us-west-1',provider: 'AWS',aws_access_key_id: ENV['AWS_ACCESS_KEY'],aws_secret_access_key: ENV['AWS_SECRET_KEY']
)
bucket = connection.directories.get(BUCKET)
file = 'test.jpg'
p file_url = bucket.files.get_https_url("uploads/#{file}",300)

生成的网址:

https://account.s3-us-west-x.amazonaws.com/files/test.doc?X-Amz-Expires=-1443648781&X-Amz-Date=20150930T213801Z&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AAAVA***FA/20150930/us-west-x/s3/aws4_request&X
-Amz-SignedHeaders=host&X-Amz-Signature=e31663f9b2470e***215825d585b14c37e

我在这里错过了什么吗?为什么生成的网址会给我一个负过期(X-Amz-Expires)?

解决方法

expires参数似乎是期望unix纪元时间的绝对到期时间…而不是从现在开始的秒数.

如果为true,则“300”将是“1970-01-01 00:05:00 UTC”的到期时间,我猜,在您生成该签名URL时,过去1443648781秒.

您生成的签名是AWS Signature V4,在URL本身中,到期时间将在几秒后显示……但旧的AWS Signature V2预计会有绝对的纪元时间,因此基于遗留行为,它如果图书馆仍然期望将纪元时间作为参数而不管使用的签名版本是什么……并且在构建网址时进行减法……这是有道理的…但是这样一个明显无效的值被盲目接受似乎有点愚蠢在图书馆旁边.

(编辑:李大同)

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

    推荐文章
      热点阅读