我不熟悉S3的工作原理,所以我不知道這個解決方案是否可行。但是,你不能簡單地將用戶的瀏覽器重定向到文件嗎?如果我理解正確,S3允許您爲存儲桶中的任何文件創建網址。因此,如果這些付費下載,那麼你可以have S3 generate a temporary URL for that download,然後刪除,一旦用戶下載它。
如果這不是一個選項,你可以嘗試這些PHP類:
編輯:
This page對信息如何「預先驗證」通過編碼在URL中的認證密鑰的請求。它位於標題爲:查詢字符串請求驗證替代的部分下。
// I'm only implementing the parts required for GET requests.
// POST uploads will require additional components.
function getStringToSign($req, $expires, $uri) {
return "$req\n\n\n$expires\n$uri";
}
function encodeSignature($sig, $key) {
$sig = utf8_encode($sig);
$sig = hash_hmac('sha1', $sig, $key);
$sig = base64_encode($sig);
return urlencode($sig);
}
$expires = strtotime('+1 hour');
$stringToSign = getStringToSign('GET', $expires, $uri);
$signature = encodeSignature($stringToSign, $awsKey);
$url .= '?AWSAccessKeyId='.$awsKeyId
.'&Expires='.$expires
.'&Signature='.$signature;
然後,只需將用戶重定向到$url
,他們應該能夠下載該文件。簽名由單向加密方案(sha1)編碼,因此您的AWS祕密訪問密鑰沒有被發現的風險。
我擔心重定向的一個問題是您需要驗證您的安全性沒有被傳遞。如果重定向需要授權,則您將此授予客戶端。 – Joe 2009-04-21 14:16:09