0

これがバグなのか、それとも SDK の使い方が間違っているのか疑問に思っています。

署名付き URL 生成コードは次のとおりです。

java.util.Date expiration = new java.util.Date();
long milliSeconds = expiration.getTime();
milliSeconds += 1000 * 60 * 60; // Add 1 hour.
expiration.setTime(milliSeconds);

URL url = s3.generatePresignedUrl(userPicturesBucket, "walala", expiration, HttpMethod.PUT);

ただし、これにより、「署名」が間違っている場所に署名済みのulrが生成されます。

Signature=7iw7DfZ3Ed24kQpsV5Hp9VrJ%2BMo%3D

これをテストするには、RESTClient を使用して完全なアドレスで PUT 要求を送信します。SignatureDoesNotMatchという禁止された応答が返されます。

ただし、Amazon S3 Signature Testerを使用して同じリクエストに署名すると、別の「署名」が取得されます

Signature=ztp2nD6gVurYhAvQojpZhReSuwE%3D

ただし、これは機能し、PUT 要求を送信すると 200 応答が返され、オブジェクトが作成されます。

私の質問は、これは Java バグの amazon sdk ですか? または、なぜ署名が異なるのですか。

ありがとう

4

2 に答える 2

0

コードにエラーがある可能性があります。

generatePresignedUrlRequest.setExpiration(expiration);
// Next line should use the 'generatePresignedUrlRequest' object
URL url = s3.generatePresignedUrl(generatePresignedUrlRequest);
于 2012-07-18T03:07:38.290 に答える
0

100%確実ではありませんが、問題は、リクエストを送信するときにURLへの署名にオブジェクトのタイプとフォーマットも含める必要があり、チェックに使用していたプログラムが自動的にcharsetフィールドを追加するという事実に関連していると思いますイメージでした。

そのため、この「PUT\n\nimage/jpeg; charset=UTF-8\n」を署名する URL に追加すると、問題が解決したようです。

于 2012-08-10T05:58:15.503 に答える