amazon s3 的用戶驗證 access-key, secrete-key


amazon  s3的用戶驗證方式是一種對稱加密方式,下面介紹此加密方式。


 請求的構造

  請求元素:

  •   AWS Access Key Id:其實就是常見的用戶名,用來區分用戶的。
  •   Signature:簽名,使用私鑰計算后得出。
  •   Timestamp:時間戳
  •   Date:時間,為每一個請求設置一個過期時間。

驗證過程

  客戶端:經過下面3個步驟

1 構建http請求。
2 使用請求內容(request_str) 和 secret-key計算簽名(signature)。
3 發送請求到aws服務器。

  aws服務器:經過下面三個步驟

4 Amazon S3 根據發送的access-key得到對應的secret-key。
5 Amazon S3 使用同樣的算法將請求內容(request_str) 和 secret-key一起計算簽名(signature)!和步驟2一樣。
6 對比用戶發送的簽名和Amazon S3計算的簽名,判斷是否合法。


簽名的構造過程

Authorization = "AWS" + " " + AWSAccessKeyId + ":" + Signature;
Signature = Base64( HMAC-SHA1( UTF-8-Encoding-Of( YourSecretAccessKeyID,
StringToSign ) ) );
StringToSign = HTTP-Verb + "\n" +
 Content-MD5 + "\n" +
 Content-Type + "\n" +
 Date + "\n" +
 CanonicalizedAmzHeaders +
 CanonicalizedResource;
CanonicalizedResource = [ "/" + Bucket ] +
 <HTTP-Request-URI, from the protocol name up to the query string> +
 [ sub-resource, if present. For example "?acl", "?location", "?logging", or
"?torrent"];
CanonicalizedAmzHeaders = <described below>

  

 

 

Example

客戶端

假設:

AWSAccessKeyId: AKIAIOSFODNN7EXAMPLE
AWSSecretAccessKey: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY

假設我們需要發送下面這樣的請求:

DELETE /puppy.jpg HTTP/1.1
User-Agent: dotnet
Host: mybucket.s3.amazonaws.com
Date: Tue, 15 Jan 2008 21:20:27 +0000
x-amz-date: Tue, 15 Jan 2008 21:20:27 +0000
Authorization: AWS AKIAIOSFODNN7EXAMPLE:k3nL7gH3+PadhTEVn5EXAMPLE

1. 構建除Authorization之外的其他字段。

DELETE /puppy.jpg HTTP/1.1
User-Agent: dotnet
Host: mybucket.s3.amazonaws.com
Date: Tue, 15 Jan 2008 21:20:27 +0000
x-amz-date: Tue, 15 Jan 2008 21:20:27 +0000

2. 提取request_str:

 

 

服務端


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM