我正在尝试创建一个过期链接以允许使用 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
关于哪里出错的任何想法?