2016-06-29 2 views
0

S3バケットにドキュメントをアップロードするアプリがあります。そこに問題はありませんが、私はそうのような要求にいくつかのカスタムヘッダーを指定する場合:S3:カスタムヘッダーが返されます。403

req.setHeader('x-amz-meta-purpose', 'purpose'); 

を、バケットのためのマッチングCORSルールを記述します。

<CORSRule> 
    <AllowedOrigin>http://www.example.com</AllowedOrigin> 
    <AllowedMethod>PUT</AllowedMethod> 
    <AllowedMethod>POST</AllowedMethod> 
    <AllowedMethod>DELETE</AllowedMethod> 
    <AllowedHeader>*</AllowedHeader> 
    <MaxAgeSeconds>3000</MaxAgeSec> 
    <ExposeHeader>x-amz-meta-purpose</ExposeHeader> 
</CORSRule> 

が、私は403応答を取得します。私は何を忘れていますか?私のコードは、カスタムヘッダーを追加せずに正常に動作します。

更新

私はこの応答を取得:

<Error><Code>SignatureDoesNotMatch</Code><Message>The request signature we calculated does not match the signature you provided. Check your key and signing method.</Message> 

はどのようにしてカスタムヘッダーを含めるように私の署名を変更できますか?これは現在次のようになっています:

String stringToSign = 'PUT\n\n' + contentType + '\n' + now + '\n' + '/' + bucketname + '/' + lead.Id + '/' + fileName; 
String encodedStringToSign = EncodingUtil.urlEncode(stringToSign, 'UTF-8'); 
Blob mac = Crypto.generateMac('HMACSHA1', Blob.valueOf(stringToSign), Blob.valueOf(secret)); 
String signed = EncodingUtil.base64Encode(mac); 

これにヘッダーを追加する方法についてのアイデアやドキュメントはありますか?あなたは、「正規化されたAMZヘッダ」を含める必要があるので、あなたは、署名V2を使用している

+0

yは何ですかそのカスタムヘッダーを使用して達成しようとしていますか? – error2007s

+0

説明のために403の応答本文を調べましたか?多くのS3エラーは本体XMLに有益な情報を持っています。最も可能性の高い説明は、署名を計算するときに、追加ヘッダーが適切にまたは完全に考慮されていないということです。 –

+0

あなたはそうです、@ Michael-sqlbot。私は質問を更新します。 –

答えて

1

...

String stringToSign = 'PUT\n\n' + 
         contentType + '\n' + 
         now + '\n' + 
>>>>>> here >>>>>> CanonicalizedAmzHeaders + 
         '/' + bucketname + '/' + lead.Id + '/' + fileName; 

注そこには、追加の「\ n」を必要とした後、この新しい値はありませんが、それCanonicalizedAmzHeaders文字列自体は '\ n'で終わります。だから

lowercase(header1) + ':' + trim(value1) + '\n' + 
lowercase(header2) + ':' + trim(value2) + '\n' + 
... 

正規化されたAMZヘッダは、名前が小文字に変換して、辞書的にソートされたヘッダと、x-amz-で始まる各ヘッダを反復処理する。この(擬似コード)のように見える文字列を構築することにより構築されていますあなたの要求に、それは最後の3行は次のようになります:

[date]\n 
x-amz-meta-purpose:purpose\n 
/bucketname/key 

http://docs.aws.amazon.com/AmazonS3/latest/dev/RESTAuthentication.html#ConstructingTheCanonicalizedResourceElement

+0

ありがとうございます。 –

関連する問題