適用場景

在典型的C/S系統架構中,伺服器端負責接收並處理客戶端的請求。那麼考慮一個使用OSS作為後端的儲存服務,客戶端將要上傳的檔案發送給伺服器端,然後伺服器端再將數據轉寄上傳到OSS。在這個過程中,一份數據需要在網路上傳輸兩次,一次從客戶端到伺服器端,一次從伺服器端到OSS。當訪問量很大的時候,伺服器端需要有足夠的頻寬資源來滿足多個客戶端的同時上傳的需求,這對架構的伸縮性提出了挑戰。

為了解決這種場景帶來的挑戰,OSS提供了授權給第三方上傳的功能。使用這個功能,每個客戶端可以直接將檔案上傳到OSS而不是通過伺服器端轉寄,節省了自建伺服器的成本,並且充分利用了OSS的海量資料處理能力,無需考慮頻寬和並發限制等,可以讓客戶專心於業務處理。

目前授權上傳可以由兩種實現方式:URL簽名和臨時訪問憑證。

URL簽名

URL簽名是授權訪問的一種方式,即在請求的URL中帶OSS AccessKeyId和Signature欄位,這樣用戶就可以直接使用該URL來進行上傳。每個URL簽名中攜帶有過期時間以保證安全。具體的做法可以參考在URL中包含簽名

臨時訪問憑證

臨時訪問憑證是通過阿里雲Security Token Service(STS)來實現授權的一種方式。其實現請參見STS Java SDK。臨時訪問憑證的流程如下:

  1. 客戶端向伺服器端發起獲得授權的請求。伺服器端先驗證客戶端的合法性。如果是合法客戶端,那麼伺服器端會使用自己的AccessKey來向STS發起一個請求授權的請求,具體可以參考存取控制。
  2. 伺服器端獲取臨時憑證之後返回給客戶端。
  3. 客戶端使用獲取的臨時憑證來發起向OSS的上傳請求,更詳細的請求構造可以參考臨時授權訪問。客戶端可以緩存該憑證用來上傳,直到憑證失效再向伺服器端請求新的憑證。

最佳實踐

相關參考連結