2013-05-17 2 views
9

ich durch die Amazon Product Advertising API in Gang gekommen war REST signature docs und ich auf Platz # 8Berechnen einer RFC-2104-konformen HMAC mit dem SHA256 Hash-Algorithmus in Ruby

eine RFC-2104-konformen HMAC mit dem SHA256 Berechnen stecken Hashalgorithmus, der die obige Zeichenfolge mit unserem geheimen Zugriffsschlüssel "Dummy" verwendet: 1234567890. Weitere Informationen zu diesem Schritt finden Sie in Dokumentation und Codebeispielen für Ihre Programmiersprache.

Nevermind, schaffte es auf einen weiteren Versuch mit Hilfe von Calculating a SHA hash with a string + secret key in python zu bekommen. Wird die Antwort unten posten.

Antwort

15

Die folgende erstellt die korrekte Signatur:

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) 
+0

Oh Glob ist das Beste! – gr8scott06

+0

Die URL webservices.amazon.com wurde in ecs.amazonaws.com geändert und Sie müssen sie aktualisieren, um eine gültige Signatur zu generieren. – OskarH

+0

@HippieBandJam Ich nehme an, du meinst nur die URL, aber würde es dir etwas ausmachen, meine Antwort zu bearbeiten? – AJcodez

2

Hinzufügen zu AJcodez Antwort:

ich tun würde:

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

encode64 fügt eine neue Zeile am Ende, strict_encode64() nicht.

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

Amazon will Sie # 9 "auf das Plus (+) und gleich (=) Zeichen in der Signatur URL kodieren" - wird jetzt nicht mehr funktionieren, wenn Sie dies nicht tun.

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