本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用已簽署的 Cookie
CloudFront 簽章 Cookie 可讓您控制當您不想變更目前URLs或想要提供對多個限制檔案的存取權時,誰可以存取您的內容,例如網站訂閱者區域中的所有檔案。本主題說明使用已簽章的 Cookie 時的注意事項,並介紹如何使用標準和自訂政策設定已簽章的 Cookie。
主題
決定使用已簽章 Cookie 的固定或自訂政策
當您建立已簽署的 Cookie 時,您會以指定已簽署 Cookie 限制的JSON格式撰寫政策陳述式,例如 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 保留您的內容:它會判斷檔案是否已在邊緣快取中,並視需要將請求轉送至原始伺服器,並將檔案傳回給使用者。
防止已簽章 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
屬性中,根據您希望使用者訪問您的內容的時間長度,指定最短的合理到期時間。
當 CloudFront 檢查已簽署 Cookie 中的過期日期和時間時
若要判斷已簽署的 Cookie 是否仍然有效, 會在HTTP請求時 CloudFront 檢查 Cookie 中的過期日期和時間。如果用戶端在到期前一刻才開始下載大型檔案,則即使在下載期間過期了,下載也應該要完成。如果TCP連線中斷,且用戶端嘗試在過期時間過後重新啟動下載,則下載會失敗。
如果用戶端使用 Range GETs 取得較小的檔案,在過期時間過後發生的任何GET請求都會失敗。如需範圍 的詳細資訊GETs,請參閱 如何 CloudFront 處理物件 (範圍GETs) 的部分要求。
範例程式碼和第三方工具
私有內容的範例程式碼只會顯示如何建立已簽署 的簽章URLs。但是,針對已簽章的 Cookie 建立簽章的程序非常類似,因此大部分範本程式碼仍然相關。如需詳細資訊,請參閱下列主題: