2016-08-08 2 views
1

Ich scheine an der ersten Hürde bei meiner Suche nach Amazon S3-Browser-basierten Uploads zu scheitern.Base64Encode für AWS passt nicht zu Amazon Beispiel

Verwenden von Amazon hier gezeigten Beispiel: http://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-post-example.html

Mit Groovy/Java, ich bin nicht in der Lage das Beispiel Postpolitik und erzeugen die gleiche Codierung wie Amazon zu kodieren.

{ "expiration": "2015-12-30T12:00:00.000Z", 
    "conditions": [ 
    {"bucket": "sigv4examplebucket"}, 
    ["starts-with", "$key", "user/user1/"], 
    {"acl": "public-read"}, 
    {"success_action_redirect": "http://sigv4examplebucket.s3.amazonaws.com/successful_upload.html"}, 
    ["starts-with", "$Content-Type", "image/"], 
    {"x-amz-meta-uuid": "14365123651274"}, 
    {"x-amz-server-side-encryption": "AES256"}, 
    ["starts-with", "$x-amz-meta-tag", ""], 

    {"x-amz-credential": "AKIAIOSFODNN7EXAMPLE/20151229/us-east-1/s3/aws4_request"}, 
    {"x-amz-algorithm": "AWS4-HMAC-SHA256"}, 
    {"x-amz-date": "20151229T000000Z" } 
    ] 
} 

Ich habe dies als String Groovy mehrzeilige definiert:

String policy_document = ''' 
{ "expiration": "2015-12-30T12:00:00.000Z", 
    "conditions": [ 
    {"bucket": "sigv4examplebucket"}, 
    ["starts-with", "$key", "user/user1/"], 
    {"acl": "public-read"}, 
    {"success_action_redirect": "http://sigv4examplebucket.s3.amazonaws.com/successful_upload.html"}, 
    ["starts-with", "$Content-Type", "image/"], 
    {"x-amz-meta-uuid": "14365123651274"}, 
    {"x-amz-server-side-encryption": "AES256"}, 
    ["starts-with", "$x-amz-meta-tag", ""], 

    {"x-amz-credential": "AKIAIOSFODNN7EXAMPLE/20151229/us-east-1/s3/aws4_request"}, 
    {"x-amz-algorithm": "AWS4-HMAC-SHA256"}, 
    {"x-amz-date": "20151229T000000Z" } 
    ] 
} 
''' 

ich dann kodiert und mit einer Assertion Bestätigung dessen, was fehlschlägt.

String base64Policy = (new BASE64Encoder()).encode(policy_document.replaceAll("\n", "").replaceAll("\r", "").getBytes("UTF-8")) 
assert 'eyAiZXhwaXJhdGlvbiI6ICIyMDE1LTEyLTMwVDEyOjAwOjAwLjAwMFoiLA0KICAiY29uZGl0aW9ucyI6IFsNCiAgICB7ImJ1Y2tldCI6ICJzaWd2NGV4YW1wbGVidWNrZXQifSwNCiAgICBbInN0YXJ0cy13aXRoIiwgIiRrZXkiLCAidXNlci91c2VyMS8iXSwNCiAgICB7ImFjbCI6ICJwdWJsaWMtcmVhZCJ9LA0KICAgIHsic3VjY2Vzc19hY3Rpb25fcmVkaXJlY3QiOiAiaHR0cDovL3NpZ3Y0ZXhhbXBsZWJ1Y2tldC5zMy5hbWF6b25hd3MuY29tL3N1Y2Nlc3NmdWxfdXBsb2FkLmh0bWwifSwNCiAgICBbInN0YXJ0cy13aXRoIiwgIiRDb250ZW50LVR5cGUiLCAiaW1hZ2UvIl0sDQogICAgeyJ4LWFtei1tZXRhLXV1aWQiOiAiMTQzNjUxMjM2NTEyNzQifSwNCiAgICB7IngtYW16LXNlcnZlci1zaWRlLWVuY3J5cHRpb24iOiAiQUVTMjU2In0sDQogICAgWyJzdGFydHMtd2l0aCIsICIkeC1hbXotbWV0YS10YWciLCAiIl0sDQoNCiAgICB7IngtYW16LWNyZWRlbnRpYWwiOiAiQUtJQUlPU0ZPRE5ON0VYQU1QTEUvMjAxNTEyMjkvdXMtZWFzdC0xL3MzL2F3czRfcmVxdWVzdCJ9LA0KICAgIHsieC1hbXotYWxnb3JpdGhtIjogIkFXUzQtSE1BQy1TSEEyNTYifSwNCiAgICB7IngtYW16LWRhdGUiOiAiMjAxNTEyMjlUMDAwMDAwWiIgfQ0KICBdDQp9' == base64Policy 

Nur mit Lesbarkeit zu helfen, wenn ich kodieren erhalte ich:

eyAiZXhwaXJhdGlvbiI6ICIyMDE1LTEyLTMwVDEyOjAwOjAwLjAwMFoiLCAgImNvbmRpdGlvbnMiOiBbICAgIHsiYnVja2V0IjogInNpZ3Y0ZXhhbXBsZWJ1Y2tldCJ9LCAgICBbInN0YXJ0cy13aXRoIiwgIiRrZXkiLCAidXNlci91c2VyMS8iXSwgICAgeyJhY2wiOiAicHVibGljLXJlYWQifSwgICAgeyJzdWNjZXNzX2FjdGlvbl9yZWRpcmVjdCI6ICJodHRwOi8vc2lndjRleGFtcGxlYnVja2V0LnMzLmFtYXpvbmF3cy5jb20vc3VjY2Vzc2Z1bF91cGxvYWQuaHRtbCJ9LCAgICBbInN0YXJ0cy13aXRoIiwgIiRDb250ZW50LVR5cGUiLCAiaW1hZ2UvIl0sICAgIHsieC1hbXotbWV0YS11dWlkIjogIjE0MzY1MTIzNjUxMjc0In0sICAgIHsieC1hbXotc2VydmVyLXNpZGUtZW5jcnlwdGlvbiI6ICJBRVMyNTYifSwgICAgWyJzdG FydHMtd2l0aCIsICIkeC1hbXotbWV0YS10YWciLCAiIl0sICAgIHsieC1hbXotY3JlZGVudGlhbCI6ICJBS0lBSU9TRk9ETk43RVhBTVBMRS8yMDE1MTIyOS91cy1lYXN0LTEvczMvYXdzNF9yZXF1ZXN0In0sICAgIHsieC1hbXotYWxnb3JpdGhtIjogIkFXUzQtSE1BQy1TSEEyNTYifSwgICAgeyJ4LWFtei1kYXRlIjogIjIwMTUxMjI5VDAwMDAwMFoiIH0gIF19

Aber ich sollte bekommen:

eyAiZXhwaXJhdGlvbiI6ICIyMDE1LTEyLTMwVDEyOjAwOjAwLjAwMFoiLA0KICAiY29uZGl0aW9ucyI6IFsNCiAgICB7ImJ1Y2tldCI6ICJzaWd2NGV4YW1wbGVidWNrZXQifSwNCiAgICBbInN0YXJ0cy13aXRoIiwgIiRrZXkiLCAidXNlci91c2VyMS8iXSwNCiAgICB7ImFjbCI6ICJwdWJsaWMtcmVhZCJ9LA0KICAgIHsic3VjY2Vzc19hY3Rpb25fcmVkaXJlY3QiOiAiaHR0cDovL3NpZ3Y0ZXhhbXBsZWJ1Y2tldC5zMy5hbWF6b25hd3MuY29tL3N1Y2Nlc3NmdWxfdXBsb2FkLmh0bWwifSwNCiAgICBbInN0YXJ0cy13aXR oIiwgIiRDb250ZW50LVR5cGUiLCAiaW1hZ2UvIl0sDQogICAgeyJ4LWFtei1tZXRhLXV1aWQiOiAiMTQzNjUxMjM2NTEyNzQifSwNCiAgICB7IngtYW16LXNlcnZlci1zaWRlLWVuY3J5cHRpb24iOiAiQUVTMjU2In0sDQogICAgWyJzdGFydHMtd2l0aCIsICIkeC1hbXotbWV0YS10YWciLCAiIl0sDQoNCiAgICB7IngtYW16LWNyZWRlbnRpYWwiOiAiQUtJQUlPU0ZPRE5ON0VYQU1QTEUvMjAxNTEyMjkvdXMtZWFzdC0xL3MzL2F3czRfcmVxdWVzdCJ9LA0KICAgIHsieC1hbXotYWxnb3JpdGhtIjogIkFXUzQtSE1BQy1TSEEyNTYifSwNCiAgICB7IngtYW16LWRhdGUiOiAiMjAxNTEyMjlUMDAwMDAwWiIgfQ0KICBdDQp9

Ich hoffe, eine neue Reihe von Augen mich in die Richtung zeigen wird. Vielen Dank für Ihre Hilfe.

Antwort

0

Folgendes funktionierte für mich in Java. Lassen Sie die Wagenrücklauf- und Zeilenvorschübe an Ort und Stelle.

String policy_document = "{ \"expiration\": \"2015-12-30T12:00:00.000Z\",\n" + 
      " \"conditions\": [\n" + 
      " {\"bucket\": \"sigv4examplebucket\"},\n" + 
      " [\"starts-with\", \"$key\", \"user/user1/\"],\n" + 
      " {\"acl\": \"public-read\"},\n" + 
      " {\"success_action_redirect\": \"http://sigv4examplebucket.s3.amazonaws.com/successful_upload.html\"},\n" + 
      " [\"starts-with\", \"$Content-Type\", \"image/\"],\n" + 
      " {\"x-amz-meta-uuid\": \"14365123651274\"},\n" + 
      " {\"x-amz-server-side-encryption\": \"AES256\"},\n" + 
      " [\"starts-with\", \"$x-amz-meta-tag\", \"\"],\n" + 
      "\n" + 
      " {\"x-amz-credential\": \"AKIAIOSFODNN7EXAMPLE/20151229/us-east-1/s3/aws4_request\"},\n" + 
      " {\"x-amz-algorithm\": \"AWS4-HMAC-SHA256\"},\n" + 
      " {\"x-amz-date\": \"20151229T000000Z\" }\n" + 
      " ]\n" + 
      "}"; 
    String base64Policy = (new BASE64Encoder()).encode(policy_document.getBytes()); 
+0

Danke für den Vorschlag, aber ich bekomme immer noch etwas andere Ergebnisse. –

0

Danke, dass Sie mich in die richtige Richtung weisen.

Die endgültige Lösung bestand darin, \ r \ n am Ende jeder Zeile in dieser Reihenfolge hinzuzufügen.

String policy_document = "{ \"expiration\": \"2015-12-30T12:00:00.000Z\",\r\n" + 
     " \"conditions\": [\r\n" + 
     " {\"bucket\": \"sigv4examplebucket\"},\r\n" + 
     " [\"starts-with\", \"$key\", \"user/user1/\"],\r\n" + 
     " {\"acl\": \"public-read\"},\r\n" + 
     " {\"success_action_redirect\": \"http://sigv4examplebucket.s3.amazonaws.com/successful_upload.html\"},\r\n" + 
     " [\"starts-with\", \"$Content-Type\", \"image/\"],\r\n" + 
     " {\"x-amz-meta-uuid\": \"14365123651274\"},\r\n" + 
     " {\"x-amz-server-side-encryption\": \"AES256\"},\r\n" + 
     " [\"starts-with\", \"$x-amz-meta-tag\", \"\"],\r\n" + 
     "\r\n" + 
     " {\"x-amz-credential\": \"AKIAIOSFODNN7EXAMPLE/20151229/us-east-1/s3/aws4_request\"},\r\n" + 
     " {\"x-amz-algorithm\": \"AWS4-HMAC-SHA256\"},\r\n" + 
     " {\"x-amz-date\": \"20151229T000000Z\" }\r\n" + 
     " ]\r\n" + 
     "}"; 

Es ist bedauerlich, dass es so starr umgesetzt werden muss und dass eine Groovy mehrzeilige Strings können dies nicht erreichen das Markup sauberer zu halten.

+1

Sie müssen es nicht mit Windows-Zeilenumbrüchen beenden. Das ist nur das Beispiel. Sie benötigen nur die Kodierung der Basis 64, um Ihre Eingabe anzupassen. –

+0

Danke für deinen Kommentar Tim. Ja, ich denke du hast Recht. Ich sollte die Richtlinie auch mit Groovy JSON erstellen können. Um jedoch zu überprüfen, ob ich den nächsten Kryptographieschritt richtig ausführe, benötigte ich eine exakte Übereinstimmung für diese Codierung, da sie als Eingabe für den Kryptoschritt dient. –

+0

Ich werde versuchen, daran zu erinnern, diese Frage zu aktualisieren, um das zu reflektieren, sobald ich durch den gesamten Prozess bin. –

Verwandte Themen