Amazon S3 - 使用Ruby 1.9.3生成过期链接

时间:2013-01-19 12:39:53

标签: ruby amazon-s3

我正在尝试创建一个过期链接,允许使用Ruby(1.9.3)访问S3上的私有文件。

我一直在遵循这里的指示:http://docs.aws.amazon.com/AmazonS3/2006-03-01/dev/RESTAuthentication.html#RESTAuthenticationQueryStringAuth - 但是我得到的最终价值是错误的。该示例仅给出最终结果,而不是每个步骤的值,因此我不确定这出错的地方。无论实施如何,中间值都应相同。

我正在使用的Ruby代码(包括相同的密钥并从上面的链接过期):

require "cgi"
require "base64"
require "openssl"
require "digest/sha1"

key_id = 'AKIAIOSFODNN7EXAMPLE' # Example Amazon key id and secret key
key = 'wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY'
expires = 1141889120
string_to_sign =  "GET\n\n\n#{expires.to_s}\n/johnsmith/photos/puppy.jpg"

digest = OpenSSL::HMAC.digest(OpenSSL::Digest::Digest.new("sha1"), key, string_to_sign)
base64 = Base64.encode64(digest).strip
signature = CGI::escape(base64)

puts "Digest: #{digest}"
puts "Base64: #{base64}"
puts "Signature: #{signature}"

输出:

  • 摘要:}'\ n \ x18p \ x83#CX \ xE4N \ xC2b \ x9FUs \ xC5J1 \ xB6
  • Base64:fScKGHCDI0NY5E7CYp9Vc8VKMbY =
  • 签名:fScKGHCDI0NY5E7CYp9Vc8VKMbY%3D

然而,亚马逊页面上的签名是:NpgCjnDzrM%2BWFzoENXmpNDUsSn8%3D

关于哪里出错的任何想法?

0 个答案:

没有答案