2

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

ただし、Amazonページの署名は次のとおりです。NpgCjnDzrM%2BWFzoENXmpNDUsSn8%3D

これがどこでうまくいかないかについてのアイデアはありますか?

4

0 に答える 0