2016-08-08 6 views
1

Amazon S3のブラウザベースのアップロードのための最初のハードルで失敗しているようです。ここに示したAmazonの例使用AWSのBase64EncodeがAmazonの例と一致しない

:Groovyの/ Javaの使用http://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-post-example.html

は、私は、例えば、ポスト政策をエンコードし、アマゾンと同じエンコーディングを生成することができないんです。

{ "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" } 
    ] 
} 

私はこのGroovyの複数行の文字列として定義されています:私は、エンコードと失敗のassertで検証しています

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" } 
    ] 
} 
''' 

eyAiZXhwaXJhdGlvbiI6ICIyMDE1LTEyLTMwVDEyOjAwOjAwLjAwMFoiLCAgImNvbmRpdGlvbnMiOiBbICAgIHsiYnVja2V0IjogInNpZ3Y0ZXhhbXBsZWJ1Y2tldCJ9LCAgICBbInN0YXJ0cy13aXRoIiwgIiRrZXkiLCAidXNlci91c2VyMS8iXSwgICAgeyJhY2wiOiAicHVibGljLXJlYWQifSwgICAgeyJzdWNjZXNzX2FjdGlvbl9yZWRpcmVjdCI6ICJodHRwOi8vc2lndjRleGFtcGxlYnVja2V0LnMzLmFtYXpvbmF3cy5jb20vc3VjY2Vzc2Z1bF91cGxvYWQuaHRtbCJ9LCAgICBbInN0YXJ0cy13aXRoIiwgIiRDb250ZW50LVR5cGUiLCAiaW1hZ2UvIl0sICAgIHsieC1hbXotbWV0YS11dWlkIjogIjE0MzY1MTIzNjUxMjc0In0sICAgIHsieC1hbXotc2VydmVyLXNpZGUtZW5jcnlwdGlvbiI6ICJBRVMyNTYifSwgICAgWyJzdG:

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

はちょうど私が私が得るエンコードするとき、可読性を支援しますFydHMtd2l0aCIsICIkeC1hbXotbWV0YS10YWciLCAiIl0sICAgIHsieC1hbXotY3JlZGVudGlhbCI6ICJBS0lBSU9TRk9ETk43RVhBTVBMRS8yMDE1MTIyOS91cy1lYXN0LTEvczMvYXdzNF9yZXF1ZXN0In0sICAgIHsieC1hbXotYWxnb3JpdGhtIjogIkFXUzQtSE1BQy1TSEEyNTYifSwgICAgeyJ4LWFtei1kYXRlIjogIjIwMTUxMjI5VDAwMDAwMFoiIH0gIF19

しかし、私は取得する必要があります。

eyAiZXhwaXJhdGlvbiI6ICIyMDE1LTEyLTMwVDEyOjAwOjAwLjAwMFoiLA0KICAiY29uZGl0aW9ucyI6IFsNCiAgICB7ImJ1Y2tldCI6ICJzaWd2NGV4YW1wbGVidWNrZXQifSwNCiAgICBbInN0YXJ0cy13aXRoIiwgIiRrZXkiLCAidXNlci91c2VyMS8iXSwNCiAgICB7ImFjbCI6ICJwdWJsaWMtcmVhZCJ9LA0KICAgIHsic3VjY2Vzc19hY3Rpb25fcmVkaXJlY3QiOiAiaHR0cDovL3NpZ3Y0ZXhhbXBsZWJ1Y2tldC5zMy5hbWF6b25hd3MuY29tL3N1Y2Nlc3NmdWxfdXBsb2FkLmh0bWwifSwNCiAgICBbInN0YXJ0cy13aXRをoIiwgIiRDb250ZW50LVR5cGUiLCAiaW1hZ2UvIl0sDQogICAgeyJ4LWFtei1tZXRhLXV1aWQiOiAiMTQzNjUxMjM2NTEyNzQifSwNCiAgICB7IngtYW16LXNlcnZlci1zaWRlLWVuY3J5cHRpb24iOiAiQUVTMjU2In0sDQogICAgWyJzdGFydHMtd2l0aCIsICIkeC1hbXotbWV0YS10YWciLCAiIl0sDQoNCiAgICB7IngtYW16LWNyZWRlbnRpYWwiOiAiQUtJQUlPU0ZPRE5ON0VYQU1QTEUvMjAxNTEyMjkvdXMtZWFzdC0xL3MzL2F3czRfcmVxdWVzdCJ9LA0KICAgIHsieC1hbXotYWxnb3JpdGhtIjogIkFXUzQtSE1BQy1TSEEyNTYifSwNCiAgICB7IngtYW16LWRhdGUiOiAiMjAxNTEyMjlUMDAwMDAwWiIgfQ0KICBdDQp9

私は目の新鮮なセットは方向に私を指すようになります願っています。提供できるアドバイスに感謝します。

答えて

0

次はJavaの私のために働いた。キャリッジリターンと改行はそのままの位置にしておきます。

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

提案していただきありがとうございますが、私はまだ若干異なる結果になります。 –

0

私に正しい方向を指摘してくれてありがとう。

最後の解決策は、各行の最後に\ r \ nをこの順序で追加することでした。

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" + 
     "}"; 

それはとても厳格とマークアップクリーナーを維持するために、これを達成することはできませんGroovyの複数行の文字列を使用していることを実装する必要があることが残念です。

+1

Windowsの改行で終了する必要はありません。これは単なる例です。入力に合わせてベース64エンコーディングが必要です。 –

+0

コメントありがとうございます。はい、私はあなたが正しいと思います。私もGroovy JSONを使ってポリシーを作成できるはずです。しかし、次の暗号化ステップを正しく実行していることを確認するために、暗号化ステップへの入力として機能するので、このエンコーディングと完全に一致する必要がありました。 –

+0

この質問を更新することを忘れないでください。 –

関連する問題