本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用簽章的 Cookie
當您不想變更目前 URL 或希望提供存取多個限制檔案 (例如,網站的訂閱者區域中的所有檔案) 時,CloudFront 簽署 Cookie 允許您控制那些可以存取您的內容的使用者。本主題說明使用已簽章的 Cookie 時的注意事項,並介紹如何使用標準和自訂政策設定已簽章的 Cookie。
主題
決定使用已簽章 Cookie 的固定或自訂政策
當您建立已簽章的 Cookie 時,您將編寫一個 JSON 格式的政策聲明來指定對已簽章的 Cookie 的限制,例如 Cookie 的有效時間。您可以使用標準政策或自訂政策。下表比較了標準和自訂政策:
描述 | 標準政策 | 自訂政策 |
---|---|---|
您可以重複使用多個檔案的政策聲明。要重複使用政策聲明,您必須在 |
否 |
是 |
您可以指定使用者可以開始存取您的內容的日期和時間 |
否 |
是 (選用) |
您可以指定使用者無法再存取您的內容的日期和時間 |
是 |
是 |
您可以指定可以存取您的內容的使用者的 IP 地址或 IP 地址範圍 |
否 |
是 (選用) |
如需有關使用標準政策建立已簽章的 Cookie 的詳細資訊,請參閱 使用固定政策設定已簽章的 Cookie。
如需有關使用自訂政策建立已簽章的 Cookie 的詳細資訊,請參閱 使用自訂政策設定簽章的 Cookie。
已簽署 Cookie 的工作方式
以下概觀了如何為已簽署的 Cookie 設定 CloudFront,以及當使用者提交包含已簽署的 Cookie 的請求時,CloudFront 如何回應。
-
在您的 CloudFront 分佈中,指定一或多個信任的金鑰群組,其中包含 CloudFront 可用來驗證 URL 簽章的公有金鑰。您可以使用對應的私有金鑰來簽署 URL。
如需詳細資訊,請參閱 指定可以建立已簽署 URLs簽署者。
-
您開發應用程式,以判斷使用者是否應該存取您的內容,如果是,則向檢視器傳送三個
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 是否仍然有效,CloudFront 在 HTTP 請求時會檢查 Cookie 中的到期日期和時間。如果用戶端在到期前一刻才開始下載大型檔案,則即使在下載期間過期了,下載也應該要完成。如果 TCP 連線中斷並且用戶端在到期時間過後嘗試重新啟動下載,則下載將失敗。
如果用戶端使用範圍 GET 以取得較小型的檔案,則到期時間過後發生的任何 GET 請求都將失敗。如需範圍 GET 的詳細資訊,請參閱 CloudFront 如何處理物件的部分請求 (範圍 GET)。
範例程式碼和第三方工具
私有內容的範本程式碼只說明如何為已簽章的 URL 建立簽章。但是,針對已簽章的 Cookie 建立簽章的程序非常類似,因此大部分範本程式碼仍然相關。如需詳細資訊,請參閱下列主題: