10

Amazon Product Advertising API REST 署名ドキュメントを調べていたところ、#8 で行き詰まりました。

上記の文字列と「ダミー」シークレット アクセス キー 1234567890 を使用して、SHA256 ハッシュ アルゴリズムで RFC 2104 準拠の HMAC を計算します。この手順の詳細については、プログラミング言語のドキュメントとコード サンプルを参照してください。

Calculating a SHA hash with a string + secret key in pythonの助けを借りて、もう一度試してみてください。以下に回答を投稿します。

4

3 に答える 3

15

以下は、正しい署名を作成します。

require 'openssl'

secret_key = '1234567890'
query = 'AWSAccessKeyId=AKIAIOSFODNN7EXAMPLE&ItemId=0679722769&Operation=ItemLookup&ResponseGroup=ItemAttributes%2COffers%2CImages%2CReviews&Service=AWSECommerceService&Timestamp=2009-01-01T12%3A00%3A00Z&Version=2009-01-06'
data = ['GET', 'ecs.amazonaws.com', '/onca/xml', query].join("\n")
sha256 = OpenSSL::Digest::SHA256.new
sig = OpenSSL::HMAC.digest(sha256, secret_key, data)
signature = Base64.encode64(sig)
于 2013-05-17T00:08:42.927 に答える
2

AJcodezの回答に追加:

私はするだろう:

...
signature_raw = Base64.strict_encode64(sig)
signature     = CGI::escape(signature_raw)

encode64最後に改行を追加しますが、追加strict_encode64()しません。

https://stackoverflow.com/a/2621023/2760406

Amazon は、「署名のプラス (+) とイコール (=) 文字を URL エンコードする」ことを望んでいます #9 - そうしないと、今は機能しません。

http://docs.aws.amazon.com/AWSECommerceService/latest/DG/rest-signature.html#rest_detailed例

于 2014-12-11T22:51:47.047 に答える