sigv4-post-Beispiel mit Python

8

Ich versuche, dieselbe Signatur aus Ссылка zu generieren Python,

%Vor%

Aber meine Signatur ist cb0b0ec487fd5e01382c9c3b6b6a6dfa170da312ddab58a4b18869e7413951be und die erwartete Signatur ist 46503978d3596de22955b4b18d6dfb1d54e8c5958727d5bdcd02cc1119c60fc9

Wo mache ich falsch?

Hinweis

%Vor%

aus Ссылка

    
dhana 07.12.2017, 17:55
quelle

1 Antwort

4

Fehler im Code

Ihr Code zum Generieren des Signaturschlüssels sieht gut aus. Wenn Sie jedoch die Signatur generieren, werden die Parameter umgeschaltet. Der Pseudocode ist:

%Vor%

Also statt

%Vor%

sollten Sie

haben %Vor%

Immer noch falsch?

Dies erzeugt die folgende Signatur, die ich trotz der Amazon Dokumentation für richtig halte, um die mitgelieferte base64-Zeichenkette zu signieren:

%Vor%

Warum sagt Amazon also, dass die Signatur 465039...c60fc9 sein soll ???

Es tut mir leid zu sagen, dass ich keine Ahnung habe. Ich vermute, dass die Dokumentation tatsächlich ungenau sein kann, entweder in Bezug auf den Signaturwert oder in Bezug auf die Eingabeparameterwerte, die für die Generierung verwendet wurden (geheimer Schlüssel, Datum, Region, Service, Zeichenkette).

Ich habe das Gefühl, dass ich ein bisschen auf etwas hinmache und so etwas vorschlage, aber gleichzeitig weiß ich aus Erfahrung, dass nicht jede technische Dokumentation online 100% genau ist (selbst wenn sie von einem seriöse Quelle).

Ich konnte diese Signatur nicht reproduzieren, egal was ich versuchte. Ich würde lieben eine Antwort sehen, die diesen Hash erfolgreich erzeugt.

Nachweis

Hier gibt es wirklich nur zwei Dinge:

  • Berechne einen Signaturschlüssel.
  • Übergeben Sie es zusammen mit dem "String to sign" an eine Hashfunktion, um die Signatur zu generieren.

Ihr Code erzeugt den erwarteten Signaturschlüssel unter Verwendung der Parameter im Beispiel unter " Ableiten des Signaturschlüssels mit anderen Sprachen "hier . Dies deutet darauf hin, dass Sie den Signaturschlüssel korrekt berechnen. Python-Code hier .

Ihr Code erzeugt auch die erwartete Signatur, wenn Sie die Parameter aus diesem Beispiel verwenden . Dies deutet darauf hin, dass Sie beide den richtigen Signaturschlüssel und die korrekte Signatur berechnen. Python-Code hier .

Ausführen der Parameter aus Ihrer Frage durch vorhandenen Python-Code, den ich kenne, um mit mehreren Diensten zu arbeiten (basierend auf dies ) erzeugt auch die gleiche 8afdb...9699e Signatur.

Ich habe auch den Java-Signaturcode in eine vorhandene Spring-Boot-Anwendung geworfen, und es wird auch die gleiche 8afdb...9699e erzeugt. Signatur für Ihre Eingabeparameter.

Was ist zu versuchen?

Ich schlage vor, dass Sie davon ausgehen, dass Ihr Signaturcode gut ist und die AWS-Dokumentation auf dieser speziellen Seite falsch ist. Schließlich funktioniert Ihr Code mit mindestens zwei anderen AWS-Beispielen.

Unterschreiben Sie eine echte -Anfrage, indem Sie Ihre Anmeldedaten, Ihre Bucket-Richtlinie, Ihre Region und das aktuelle Datum verwenden , usw.

Dann posten Sie das Beispielformular und sehen Sie, ob es funktioniert. Wenn es nicht funktioniert, können Sie die Frage mit dem Fehler aktualisieren, den Sie vom Formular POST erhalten.

    
Mike Patrick 10.12.2017, 19:02
quelle