本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用簽署的餅乾
CloudFront 簽署的 Cookie 可讓您控制當您不想變更目前內容的使用者,URLs或是您想要提供存取多個受限檔案 (例如網站訂閱者區域中的所有檔案) 時,誰可以存取您的內容。本主題說明使用已簽章的 Cookie 時的注意事項,並介紹如何使用標準和自訂政策設定已簽章的 Cookie。
主題
決定對已簽署的 Cookie 使用固定或自訂原則
當您建立已簽署的 Cookie 時,您會以JSON格式撰寫政策陳述式,以指定已簽署 Cookie 的限制,例如 Cookie 的有效時間長度。您可以使用標準政策或自訂政策。下表比較了標準和自訂政策:
描述 | 標準政策 | 自訂政策 |
---|---|---|
您可以重複使用多個檔案的政策聲明。要重複使用政策聲明,您必須在 |
否 |
是 |
您可以指定使用者可以開始存取您的內容的日期和時間 |
否 |
是 (選用) |
您可以指定使用者無法再存取您的內容的日期和時間 |
是 |
是 |
您可以指定可以存取您的內容的使用者的 IP 地址或 IP 地址範圍 |
否 |
是 (選用) |
如需有關使用標準政策建立已簽章的 Cookie 的詳細資訊,請參閱 使用固定原則設定已簽署的 Cookie。
如需有關使用自訂政策建立已簽章的 Cookie 的詳細資訊,請參閱 使用自訂原則設定已簽署的 Cookie。
已簽署 Cookie 的工作方式
以下是您如何設定 CloudFront 已簽署 Cookie 的概觀,以及使用者提交包含已簽署 Cookie 的要求時如何 CloudFront 回應。
-
在您的 CloudFront 發行版中,指定一或多個受信任的金鑰群組,其中包含 CloudFront 可用來驗證URL簽章的公開金鑰。您可以使用對應的私密金鑰來簽署URLs。
如需詳細資訊,請參閱指定可以建立已簽署URLs和已簽署 Cookie 的簽署者。
-
您開發應用程式,以判斷使用者是否應該存取您的內容,如果是,則向檢視器傳送三個
Set-Cookie
標頭。(每個Set-Cookie
標頭只能包含一個名稱-值對,一個帶 CloudFront 符號的 cookie 需要三個名稱-值對。) 在瀏覽者請求您的私有內容之前,您必須將Set-Cookie
標頭傳送到檢視器。如果您在 Cookie 上設定了較短的到期時間,則可能還需要傳送三個Set-Cookie
標頭以回應後續請求,以便使用者持續存取。通常,您的 CloudFront 發行版至少會有兩種快取行為,一種不需要驗證,另一種則需要驗證。網站安全部分的錯誤頁面包含重定向器或指向登入頁面的連結。
如果您將分發配置為基於 Cookie 緩存文件,則 CloudFront 不會根據簽名 cookie 中的屬性緩存單獨的文件。
-
使用者登入您的網站,以及付費內容或滿足其他存取需求。
-
您的應用程式傳回回應中的
Set-Cookie
標頭,並且檢視器會儲存名稱值組。 -
使用者請求了檔案。
使用者的瀏覽器或其他檢視器從步驟 4 取得名稱值組,並將它們新增至
Cookie
標頭中的請求中。這是已簽章的 Cookie。 -
CloudFront 使用公開金鑰來驗證已簽署 Cookie 中的簽章,並確認 Cookie 沒有遭到竄改。如果簽章無效,請求會遭到拒絕。
如果 cookie 中的簽名有效,請查 CloudFront 看 cookie 中的策略聲明(如果您使用固定策略,則構建一個策略)以確認請求仍然有效。例如,如果您為 Cookie 指定了開始和結束日期和時間,請 CloudFront 確認使用者在您要允許存取的期間內嘗試存取您的內容。
如果要求符合原則陳述式中的需求,就像針對未受限制的內容一樣 CloudFront 提供您的內容:它會判斷檔案是否已在 Edge 快取中,視需要將要求轉送至原始位置,然後將檔案傳回給使用者。
防止濫用簽署的 Cookie
如果您在 Domain
標頭中指定 Set-Cookie
參數,請指定可能的最精確值,以降低具有相同根網域名稱之人員的存取可能性。例如,app.example.com 優於 example.com,尤其是當您無法控制 example.com 時。這有助於防止他人從 www.example.com 存取您的內容。
要協助避免發生這種類型的攻擊,請執行下列動作:
-
排除
Expires
和Max-Age
的屬性,以便Set-Cookie
標頭建立工作階段 Cookie。工作階段 Cookie 會在使用者關閉瀏覽器時自動刪除,以降低有人未經授權存取您的內容的可能性。 -
包含
Secure
屬性,以便檢視器在請求中包含該 Cookie 時,將對其進行加密。 -
如果可能,請使用自訂政策,並包含檢視器的 IP 地址。
-
在
CloudFront-Expires
屬性中,根據您希望使用者訪問您的內容的時間長度,指定最短的合理到期時間。
在已簽署的 Cookie 中 CloudFront 檢查到期日期和時間時
要確定簽署的 cookie 是否仍然有效,請在HTTP請求時 CloudFront 檢查 cookie 中的到期日期和時間。如果用戶端在到期前一刻才開始下載大型檔案,則即使在下載期間過期了,下載也應該要完成。如果TCP連線中斷,且用戶端在到期時間過後嘗試重新啟動下載,下載將會失敗。
如果用戶端使用 Range GETs 取得較小片段的檔案,則在到期時間過後發生的任何GET要求都會失敗。如需「範圍」的更多資訊GETs,請參閱如何 CloudFront 處理物件 (範圍GETs) 的部分要求。
範例程式碼和第三方工具
私人內容的範例程式碼只會顯示如何建立已簽署的簽名URLs。但是,針對已簽章的 Cookie 建立簽章的程序非常類似,因此大部分範本程式碼仍然相關。如需詳細資訊,請參閱下列主題: