Amazon S3: Seltsame Fehlermeldung -' Manchmal' SignatureDoesNotMatch, manchmal ist es nicht
Ich bin der Entwicklung von code für salesforce. Wir sind mit 'Force.com für Amazon Web Services" - App aus Appexchange. Die app wird zur Verfügung gestellt von Amazon.
Ich bin das herunterladen von Dateien von der Amazon S3 auf einer Maschine.
Manchmal bin ich immer den unten genannten Fehler. Interessante Sache, nur manchmal bekomme ich diesen Fehler, rest der Zeit es funktioniert, sogar für die gleiche Datei.
<Error>
<Code>SignatureDoesNotMatch</Code>
<Message>
The request signature we calculated does not match the signature you provided. Check your key and signing method.
</Message>
Ich habe versucht, mit beiden URL-Muster zur Verfügung gestellt von Amazon. Erlischt für 1 Stunde nach der link-Generierung, daher kein Problem.
URL1:- http://adminportal.s3.amazonaws.com/sample.pdf?AWSAccessKeyId=AKIAIRUZSRRCVSLXZCIA&Expires=1372653478&Signature=RvMJ1gJL+qNKmnRkqzuytmlUTGQ=
URL2:- http://s3.amazonaws.com/adminportal/sample.pdf?AWSAccessKeyId=AKIAIRUZSRRCVSLXZCIA&Expires=1372658253&Signature=%2FmI0m0PTlHJpJ%2FP5d%2FX3OApqzcI%3D
Die Signatur generiert wird, die von der Klasse bereitgestellt durch Amazon, denke ich mal muss es funktionieren auch alle mal.
Kann jemand aufwendigen warum würde das S3 geben, dieser Fehler nur manchmal?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Schließlich war ich in der Lage, dieses problem zu lösen, ist hier, wie?
Beispiel-URL für die Datei auf Amazon S3-
Hier die Signatur wird erzeugt, indem Klassen von Amazon.
Unbekannten Gründen, 'Force.com für Amazon Web Services" - app war die Generierung von Signatur, die LEERZEICHEN enthalten.
E. g. In der angegebenen URL, Leerzeichen werden ersetzt durch '+'.
Um loszuwerden, das problem, nur die URL-Kodierung der Signatur. Codierung ersetzen Leerzeichen mit Sonderzeichen und problem gelöst wird.
var signature = crypto.createHmac('sha1',AWS_SECRET_KEY).update(put_request).digest( 'base64');
signature = encodeURIComponent(signature.trim());
signature = signature.replace('%2B','+');
sollte die Letzte Zeile seinsignature = signature.replace('+', '%2B');
oder sollte es entfernt werden?+
symbol zu Kodieren Räume (devcenter.heroku.com/articles/...), und mit%2B
(.quote()
statt.quote_plus()
in python) funktioniert nicht für mich.Sind Sie mit dem Java-SDK? Welche version?
Wurde ein Fehler eingeführt in version 1.4.4, die ich denke, und das wurde behoben in der neuesten releases. Sobald ich ein Upgrade auf die buggy version, die ich hatte, intermittierende Signatur Probleme bei der Verwendung von SQS, und ich habe gesehen, ein post auf den AWS-Foren von einigen Personen berichtet, die exakte gleiche Problem mit DynamoDB. Nun habe ich ein Upgrade auf die version 1.4.7 und der bug verschwunden.
Vielleicht sind Sie sehen die gleichen Fehler!