1

當我在閱讀與Amazon S3互動,我才知道有Amazon AWS該請求認證通過2種方式差參數

  1. HTTP Authorization完成: 使用HTTP授權頭提供身份驗證信息的最常用方法
  2. Query string parameters: 當您希望完全在URL中表示請求時,使用查詢參數對請求進行身份驗證非常有用。這種方法也被稱爲presigning一個URL。

問題是在哪種情況下我應該選擇一種方法而不是另一種。這兩種認證方式有其優點和缺點嗎?作爲開發人員,通過使用query string parameters方法,我可以通過在Web瀏覽器中輸入預先註冊的URL來預先設置URL,以便最終用戶能夠臨時訪問Amazon S3資源。我可以使用HTTP Authorization方法來實現相同的目的嗎?如果是的話哪種方法更好用,它們各自的侷限性是什麼?

回答

1

first AWS page總覽說有什麼區別:

除了POST請求請求由使用查詢參數簽署,所有的亞馬遜S3存儲操作和對象操作使用授權請求頭部提供身份驗證信息。

基本上POST用於HTML forms(在Mozilla頁面中詳細討論)。只要請求涉及將數據傳遞到遠程服務器,您就可以使用表單,而不僅僅是檢查狀態。作爲HTML method Attribute(W3Schools的)指出,

切勿使用GET發送敏感數據! (將在URL中可見)

作爲區別於POST

追加形式數據的HTTP請求的主體內(數據未示出的是在URL)

2

我可以使用HTTP授權方法來實現相同的目的嗎?

有時。關鍵的區別在於,作爲開發人員,您並不總是有足夠的權限來控制用戶代理注入標題。最明顯的例子是網頁瀏覽器爲了響應用戶點擊鏈接而發起的簡單的GET請求。在這種情況下,您無法爲瀏覽器發送Authorization:標頭,因此您只需對URL進行預簽名即可。

重要的是,在簽名的URL中沒有任何信息被認爲是敏感的,所以沒有特別強烈的動機來使用標題而不是簽名的URL。您的AWS訪問密鑰ID不是祕密,您的AWS Secret不能在計算可行的時間範圍內從其他元素和簽名派生出來,特別是在您使用簽名版本4時,您應該這樣做。簽名版本2在舊版地區尚未正式棄用,但較新的S3從未支持過,可能永遠不會。

當您確實控制用戶代理時(例如在後端服務器代碼中),添加標頭可能更可取,因爲您無需對已擁有的URL字符串進行任何操作。

+0

我已經看到了亞馬遜Cognito,我認爲它將用新機制來替換查詢字符串參數。 – Prudhvi

+0

我可能是錯的,但我不認爲*所以......據我所知,cognito會生成臨時訪問密鑰和祕密,這些密鑰和祕密像普通憑證一樣工作,並增加了安全性令牌。 –