2017-02-14 10 views
1

クライアントのブラウザから直接S3バケットにアップロードするAWS4署名を生成しようとしています。正しい、私はここでの例からのアクセスキーとポリシーを使用しましたAws Signature Version 4ポリシーが例と一致しません

AWS - Deriving the Signing Key with .NET (C#)

をポリシーと署名が生成されていることを確認するために:私はここでは例を使用してC#で署名を生成しています

AWS - Examples: Browser-Based Upload using HTTP POST (Using AWS Signature Version 4)

ポリシーを生成するためにいくつかの方法を試しましたが、一致しません。私は例から正確なポリシー文字列をコピーして貼り付けています。では、なぜこの仕事しません:

eyAiZXhwaXJhdGlvbiI6ICIyMDE1LTEyLTMwVDEyOjAwOjAwLjAwMFoiLA0KICAiY29uZGl0aW9ucyI6IFsNCiAgICB7ImJ1Y2tldCI6ICJzaWd2NGV4YW1wbGVidWNrZXQifSwNCiAgICBbInN0YXJ0cy13aXRoIiwgIiRrZXkiLCAidXNlci91c2VyMS8iXSwNCiAgICB7ImFjbCI6ICJwdWJsaWMtcmVhZCJ9LA0KICAgIHsic3VjY2Vzc19hY3Rpb25fcmVkaXJlY3QiOiAiaHR0cDovL3NpZ3Y0ZXhhbXBsZWJ1Y2tldC5zMy5hbWF6b25hd3MuY29tL3N1Y2Nlc3NmdWxfdXBsb2FkLmh0bWwifSwNCiAgICBbInN0YXJ0cy13aXRoIiwgIiRDb250ZW50LVR5cGUiLCAiaW1hZ2UvIl0sDQogICAgeyJ4LWFtei1tZXRhLXV1aWQiOiAiMTQzNjUxMjM2NTEyNzQifSwNCiAgICB7IngtYW16LXNlcnZlci1zaWRlLWVuY3:

var policy = "{ \"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\" }]}"; 

// hash the Base64 version of the policy document and pass this to the signer as the body hash 
var policyStringBytes = Encoding.UTF8.GetBytes(policy); 
return Convert.ToBase64String(policyStringBytes); 

例では、ポリシーの文字列がなければならないことを言いますJ5cHRpb24iOiAiQUVTMjU2In0sDQogICAgWyJzdGFydHMtd2l0aCIsICIkeC1hbXotbWV0YS10YWciLCAiIl0sDQoNCiAgICB7IngtYW16LWNyZWRlbnRpYWwiOiAiQUtJQUlPU0ZPRE5ON0VYQU1QTEUvMjAxNTEyMjkvdXMtZWFzdC0xL3MzL2F3czRfcmVxdWVzdCJ9LA0KICAgIHsieC1hbXotYWxnb3JpdGhtIjogIkFXUzQtSE1BQy1TSEEyNTYifSwNCiAgICB7IngtYW16LWRhdGUiOiAiMjAxNTEyMjlUMDAwMDAwWiIgfQ0KICBdDQp9

しかし、戻って上記の方法:

eyAiZXhwaXJhdGlvbiI6ICIyMDE1LTEyLTMwVDEyOjAwOjAwLjAwMFoiLCJjb25kaXRpb25zIjogW3siYnVja2V0IjogInNpZ3Y0ZXhhbXBsZWJ1Y2tldCJ9LFsic3RhcnRzLXdpdGgiLCAiJGtleSIsICJ1c2VyL3VzZXIxLyJdLHsiYWNsIjogInB1YmxpYy1yZWFkIn0seyJzdWNjZXNzX2FjdGlvbl9yZWRpcmVjdCI6ICJodHRwOi8vc2lndjRleGFtcGxlYnVja2V0Ln MzLmFtYXpvbmF3cy5jb20vc3VjY2Vzc2Z1bF91cGxvYWQuaHRtbCJ9LFsic3RhcnRzLXdpdGgiLCAiJENvbnRlbnQtVHlwZSIsICJpbWFnZS8iXSx7IngtYW16LW1ldGEtdXVpZCI6ICIxNDM2NTEyMzY1MTI3NCJ9LHsieC1hbXotc2VydmVyLXNpZGUtZW5jcnlwdGlvbiI6ICJBRVMyNTYifSxbInN0YXJ0cy13aXRoIiwgIiR4LWFtei1tZXRhLXRhZyIsICIiXSx7IngtYW16LWNyZWRlbnRpYWwiOiAiQUtJQUlPU0ZPRE5ON0VYQU1QTEUvMjAxNTEyMjkvdXMtZWFzdC0xL3MzL2F3czRfcmVxdWVzdCJ9LHsieC1hbXotYWxnb3JpdGhtIjogIkFXUzQtSE1BQy1TSEEyNTYifSx7IngtYW16LWRhdGUiOiAiMjAxNTEyMjlUMDAwMDAwWiIgfV19

私も政策文字列が一致するように得ることができない場合は、一致する署名を生成するには希望がありません。

+0

改行に「\ n」を使用 – hjpotter92

+0

*「一致するポリシー文字列を取得できない場合でも、一致するシグネチャを生成することはできません。」「実際には、場合。あなたが正しいですが、シグネチャは例と一致しません...しかし、base64エンコーディングがポリシードキュメントに対して*正しい*であり、ポリシードキュメントが有効なJSON(空白が意味を持たない)である限り、物理的に異なっていても論理的には同等の要求であるため、まだ有効ではない*署名があります。それでも、本の作業のための名誉。 –

+0

ああ、そう...手でこれらのものを建ててみないでください。 JSONを実際にエンコードするライブラリを使用します。 –

答えて

0

これは基本的には実行する必要があります。 ドキュメントページの出力に基づいて、base64コードをコピーしてhttps://www.base64decode.org/ に貼り付け、デコードをクリックします。 これは、デコードされたjsonコンテンツを表示します。

私はこれを行い、あなたのjsonコンテンツと比較しました。 - の例では、

<space>"conditions": [<space><space><space><space>{"bucket": "sigv4examplebucket"},

を示していますが、あなたのコードに示すあなたは、スペースを見てする必要があります

- @ hjpotter92で述べたように、あなたが持っている必要があります\ nは新しい行 のために

"conditions": [{"bucket": "sigv4examplebucket"},

これが役立つことを願っています。

+0

hjpotter92とTiti Wangsa bin Damhoreに感謝します。 @ hjpotter92は私を抱きしめて、基本的にティティがどこにいるのか教えてくれた。それは、キャリッジリターンとスペースの組み合わせでした。 C#のFYIそれを正しくエンコードするには、 "\ r \ n"を使用しなければなりませんでした。プラスの側では、シグネチャはこの例にもマッチします:) – gsxrboy73

関連する問題