2014-08-30 55 views
1

我的服務器將與S3通信。有兩種可能性,據我瞭解:保護用於特定用戶顯示的Amazon S3文件

1)將文件加載到我的服務器,並將其發送給用戶,只保留到我的服務器的IP 2 S3訪問)重定向到S3,而我的服務器

上處理身份驗證

我瞭解(我認爲)怎麼辦第1張: Does Amazon S3 support HTTP request with basic authentication

但有什麼辦法來完成#2?我想避免首先將文件加載到我的服務器並將其發送給用戶的延遲。

我不知道如何保持S3網址在#2保護公衆的訪問。有人可能會通過我的身份驗證,獲得下載鏈接,但該鏈接將公開訪問。

我是新來的S3一般,所以忍耐一下,如果我誤解了什麼。

編輯:我已經調查過與到期時間簽訂的鏈接,但他們仍然可以被其他人訪問。我也寧願用我自己的身份驗證,所以我可以允許訪問一個鏈接只有當用戶在簽名。

回答

1

你應該試試下面的代碼,您的服務器產生將到期的URL中說,60秒用戶可以直接從S3服務器下載文件。

第一:從這裏下載HMAX.php: http://pear.php.net/package/Crypt_HMAC/redirected

<?php 
require_once('Crypt/HMAC.php'); 

echo getS3Redirect("/test.jpg") . "\n"; 

function getS3Redirect($objectName) 
{ 
    $S3_URL = "http://s3.amazonaws.com"; 
    $keyId = "your key"; 
    $secretKey = "your secret"; 
    $expires = time() + 60; 
    $bucketName = "/your bucket"; 

    $stringToSign = "GET\n\n\n$expires\n$bucketName$objectName"; 
    $hasher =&amp; new Crypt_HMAC($secretKey, "sha1"); 
    $sig = urlencode(hex2b64($hasher-&gt;hash($stringToSign))); 

    return "$S3_URL$bucketName$objectName?AWSAccessKeyId=$keyId&amp;Expires=$expires&amp;Signature=$sig"; 
} 

function hex2b64($str) 
{ 
    $raw = "; 
    for ($i=0; $i &lt; strlen($str); $i+=2) 
    { 
     $raw .= chr(hexdec(substr($str, $i, 2))); 
    } 
    return base64_encode($raw); 
} 

?> 

取一試。

相關問題