2017-07-05 19 views
1

私はhttp://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-post-example.htmlAWS Base64でS3のHTTP POSTバケット

から例を再作成しようとしていますそして、最初のステップは、base64にポリシーを変換することです。したがって、この例

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

に彼らは私が同じ

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" + 
      "}"; 
    final byte[] authBytes = policy_document.getBytes(StandardCharsets.UTF_8); 
    final String encoded = Base64.getEncoder().encodeToString(authBytes); 

    System.out.println("base64 " + encoded); 

を得ることを期待していますが、私は(これは取得していますBASE64で、これは

次のJavaコードを使用して
eyAiZXhwaXJhdGlvbiI6ICIyMDE1LTEyLTMwVDEyOjAwOjAwLjAwMFoiLA0KICAiY29uZGl0aW9ucyI6IFsNCiAgICB7ImJ1Y2tldCI6ICJzaWd2NGV4YW1wbGVidWNrZXQifSwNCiAgICBbInN0YXJ0cy13aXRoIiwgIiRrZXkiLCAidXNlci91c2VyMS8iXSwNCiAgICB7ImFjbCI6ICJwdWJsaWMtcmVhZCJ9LA0KICAgIHsic3VjY2Vzc19hY3Rpb25fcmVkaXJlY3QiOiAiaHR0cDovL3NpZ3Y0ZXhhbXBsZWJ1Y2tldC5zMy5hbWF6b25hd3MuY29tL3N1Y2Nlc3NmdWxfdXBsb2FkLmh0bWwifSwNCiAgICBbInN0YXJ0cy13aXRoIiwgIiRDb250ZW50LVR5cGUiLCAiaW1hZ2UvIl0sDQogICAgeyJ4LWFtei1tZXRhLXV1aWQiOiAiMTQzNjUxMjM2NTEyNzQifSwNCiAgICB7IngtYW16LXNlcnZlci1zaWRlLWVuY3J5cHRpb24iOiAiQUVTMjU2In0sDQogICAgWyJzdGFydHMtd2l0aCIsICIkeC1hbXotbWV0YS10YWciLCAiIl0sDQoNCiAgICB7IngtYW16LWNyZWRlbnRpYWwiOiAiQUtJQUlPU0ZPRE5ON0VYQU1QTEUvMjAxNTEyMjkvdXMtZWFzdC0xL3MzL2F3czRfcmVxdWVzdCJ9LA0KICAgIHsieC1hbXotYWxnb3JpdGhtIjogIkFXUzQtSE1BQy1TSEEyNTYifSwNCiAgICB7IngtYW16LWRhdGUiOiAiMjAxNTEyMjlUMDAwMDAwWiIgfQ0KICBdDQp9 

あるべきと言います違う)

eyAiZXhwaXJhdGlvbiI6ICIyMDE1LTEyLTMwVDEyOjAwOjAwLjAwMFoiLAogICJjb25kaXRpb25zIjogWwogICAgeyJidWNrZXQiOiAic2lndjRleGFtcGxlYnVja2V0In0sCiAgICBbInN0YXJ0cy13aXRoIiwgIiRrZXkiLCAidXNlci91c2VyMS8iXSwKICAgIHsiYWNsIjogInB1YmxpYy1yZWFkIn0sCiAgICB7InN1Y2Nlc3NfYWN0aW9uX3JlZGlyZWN0IjogImh0dHA6Ly9zaWd2NGV4YW1wbGVidWNrZXQuczMuYW1hem9uYXdzLmNvbS9zdWNjZXNzZnVsX3VwbG9hZC5odG1sIn0sCiAgICBbInN0YXJ0cy13aXRoIiwgIiRDb250ZW50LVR5cGUiLCAiaW1hZ2UvIl0sCiAgICB7IngtYW16LW1ldGEtdXVpZCI6ICIxNDM2NTEyMzY1MTI3NCJ9LAogICAgeyJ4LWFtei1zZXJ2ZXItc2lkZS1lbmNyeXB0aW9uIjogIkFFUzI1NiJ9LAogICAgWyJzdGFydHMtd2l0aCIsICIkeC1hbXotbWV0YS10YWciLCAiIl0sCgogICAgeyJ4LWFtei1jcmVkZW50aWFsIjogIkFLSUFJT1NGT0ROTjdFWEFNUExFLzIwMTUxMjI5L3VzLWVhc3QtMS9zMy9hd3M0X3JlcXVlc3QifSwKICAgIHsieC1hbXotYWxnb3JpdGhtIjogIkFXUzQtSE1BQy1TSEEyNTYifSwKICAgIHsieC1hbXotZGF0ZSI6ICIyMDE1MTIyOVQwMDAwMDBaIiB9CiAgXQp9 

アイデアはありますか?私は文字通りそのページからポリシーをコピーして貼り付けましたか?これがなければ私はこの例を再現することはできません。 https://www.base64decode.org/を使用して両方の署名をデコードすると、同じポリシーが返されます。だから何が問題なの?

答えて

2

は私が\ r \ nを持つすべての\ nを交換した後、この

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

を使用してみてください、私はAWSのマニュアルページが提供するものと同じbase64でエンコードされた値を得ました。

+0

irony ...のドキュメントでは、キャリッジリターンを追加しないようにしていますが、それらを追加するとbase64の一致がトリガーされます。返品を追加することも私のために働いた。そのページの例と一致するように私の署名を得ることはできません。私はルビーにいる。 –

+0

できればこれを2回upvoteします。エンコーディングは、スペース、文字の小さな変化に対しても非常に敏感です。したがって、AWSの例のように正確な出力を得ようとする場合は、すべての空白や文字などが完璧であることを確認する必要があります。上記の答えはそれを解決します。しかし、実生活の例では、あなた自身の文字列を生成し、他の文字列のハッシュと比較しないので、それは重要ではありません。 – HopeKing

関連する問題