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

使用Ruby为CloudFront创建签名的URL

发布时间:2020-12-16 21:33:16 所属栏目:百科 来源:网络整理
导读:历史: 我在亚马逊上创建了一个密钥和pem文件. 我创建了一个私人桶 我创建了一个公共发行版,并使用原始ID连接到私人存储桶:工作 我创建了一个私人发行版并将其连接到#3 – 现在我被拒绝访问:预期 我很难生成一个可行的网址.我一直在努力遵循这里描述的指示
历史:

>我在亚马逊上创建了一个密钥和pem文件.
>我创建了一个私人桶
>我创建了一个公共发行版,并使用原始ID连接到私人存储桶:工作
>我创建了一个私人发行版并将其连接到#3 – 现在我被拒绝访问:预期

我很难生成一个可行的网址.我一直在努力遵循这里描述的指示:http://docs.amazonwebservices.com/AmazonCloudFront/latest/DeveloperGuide/index.html?PrivateContent.html

这是我到目前为止所做的…虽然不起作用 – 仍然被拒绝访问:

def url_safe(s)
  s.gsub('+','-').gsub('=','_').gsub('/','~').gsub(/n/,'').gsub(' ','')
end

def policy_for_resource(resource,expires = Time.now + 1.hour)
  %({"Statement":[{"Resource":"#{resource}","Condition":{"DateLessThan":{"AWS:EpochTime":#{expires.to_i}}}}]})
end

def signature_for_resource(resource,key_id,private_key_file_name,expires = Time.now + 1.hour)
    policy = url_safe(policy_for_resource(resource,expires))
    key = OpenSSL::PKey::RSA.new(File.readlines(private_key_file_name).join("")) 
    url_safe(Base64.encode64(key.sign(OpenSSL::Digest::SHA1.new,(policy))))
end

def expiring_url_for_private_resource(resource,expires = Time.now + 1.hour)
  sig = signature_for_resource(resource,expires)
  "#{resource}?Expires=#{expires.to_i}&Signature=#{sig}&Key-Pair-Id=#{key_id}"
end

resource = "http://d27ss180g8tp83.cloudfront.net/iwantu.jpeg"
key_id = "APKAIS6OBYQ253QOURZA"
pk_file = "doc/pk-APKAIS6OBYQ253QOURZA.pem"
puts expiring_url_for_private_resource(resource,pk_file)

谁能告诉我这里我做错了什么?

解决方法

所有,

我刚刚使用这个问题中的一些代码创建了一个可用于使用Ruby签署CF URL的小gem:

https://github.com/stlondemand/aws_cf_signer

我可能会在未来几周对其进行重大更改,因为我尝试在我的应用程序中实际使用它,但是想让你们知道,因为你在attributions部分列出了.

(编辑:李大同)

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

    推荐文章
      热点阅读