2017-12-20 72 views
0

バケットオブジェクトのバージョンを取得するために、署名v4のgetBucketObjectVersions操作を使用しようとしています。以下のサンプルリクエストに記載されているリクエストパラメータを追加しないと、レスポンスを正常に取得できます。AWS S3にオプションのパラメータを送信するときにSignatureDoesNotMatchエラーが発生する

GET /signv4testq23a1/?versions 
 
Authorization: AWS4-HMAC-SHA256 Credential=AKXXXXXXXXXXXEA/20171220/us-east-2/s3/aws4_request,SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date,Signature=fe3d26c4sdasdasd7fa15324XXXXX563dsf148df58d131b4cede6 
 
x-amz-content-sha256: UNSIGNED-PAYLOAD 
 
x-amz-date: Wed, 20 Dec 2017 07:22:14 GMT 
 
Content-Type: application/xml 
 
Host: s3.us-east-2.amazonaws.com

私はSignatureDoesNotMatchエラーを取得しています以下のサンプルリクエストで述べたように、私は、任意のリクエストパラメータを追加する場合。署名を計算する際に生成される正規の要求は、バックエンドサービスが期待する正規の要求と同じであることに注意してください。しかし、バックエンドサービスからのStringToSign値で期待される異なるハッシュされた標準的な要求値を得る。

何故その理由が考えられますか?リクエストパラメータと

サンプル要求:

GET /signv4testq23a1/?versions&delimiter=/ 
 
Authorization: AWS4-HMAC-SHA256 Credential=AKXXXXXXXXXXXEA/20171220/us-east-2/s3/aws4_request,SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date,Signature=192ce5f5e6b661bd5aXXXXXXXXXXXEAe5f50fbe8efda5a3e967d4f27972e 
 
x-amz-date: Wed, 20 Dec 2017 08:53:17 GMT 
 
Content-Type: application/xml 
 
Host: s3.us-east-2.amazonaws.com

Cannonical要求:

GET 
 
/signv4testq23a1/ 
 
delimiter=%2F&versions= 
 
content-type:application/xml 
 
host:s3.us-east-2.amazonaws.com 
 
x-amz-content-sha256:UNSIGNED-PAYLOAD 
 
x-amz-date:Wed, 20 Dec 2017 08:53:17 GMT 
 

 
content-type;host;x-amz-content-sha256;x-amz-date 
 
UNSIGNED-PAYLOAD

enter link description here

答えて

1

これは問題です:

delimiter=%2F&versions= 

キーと値は、URLエスケープ(エンコード)する必要がありますが、パラメータ間&&のようにエスケープすべきではない...それはちょうど&でなければなりません。一度ソートされ組み立てられた文字列全体ではなく、各キーと値を独自にエンコードする必要があります。

CanonicalQueryString

URIエンコードされたクエリ文字列パラメータを指定します。名前と値を個別にURIエンコードします。

http://docs.aws.amazon.com/AmazonS3/latest/API/sig-v4-header-based-auth.html

+0

私はそれをエスケープせずに&を使用している場合、私は、バックエンドサービスから期待される別の標準的な要求を取得しています。 は正規のリクエストを生成した: はGET/1513162931643testconbkt2/ デリミタ=%2F&MAX-キー= 3&バージョン= コンテンツタイプ:アプリケーション/ XML ホスト:s3-us-west-2.amazonaws.com X-AMZ-コンテンツ-sha256:UNSIGNED-PAYLOAD X-AMZ-日:水曜日、2017年12月20日13時40分03秒GMT コンテンツタイプ、ホストX-AMZ-コンテンツ-SHA256; X-AMZ-日付 UNSIGNEDペイロード – keetz

+0

バックエンドからの正規の要求は、(エラーメッセージに返されます): GET /1513162931643testconbkt2/ デリミタ=%2F &バージョン= コンテンツタイプ:application/xml ホスト:s3-us-west-2.amazonaws。com x-amz-content-sha256:UNSIGNED-PAYLOAD x-amz-date:水曜日、2020年12月20日13:40:03 GMT コンテンツタイプ;ホスト; x-amz-content-sha256; x-amz -date UNSIGNED-PAYLOAD – keetz

+0

最初のコメントから、バックエンドが返す正式なリクエストは、あなたのコードが計算しているものとどのように異なっていますか?リテラルの出力やコードを追加するときには、編集ボタンを使用してコメントの代わりに質問内に追加の内容を入力してください。コメントを読むのは難しいです。 –

関連する問題