本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用固定政策設定已簽署 Cookie
若要使用標準政策設定已簽章的 Cookie,請完成以下步驟。若要建立簽章,請參閱 為使用固定政策的已簽章 Cookie 建立簽章。
使用標準政策設定已簽章的 Cookie
-
如果您使用 .NET 或 Java 來建立已簽署的 Cookie,而且尚未將金鑰對的私有金鑰從預設 .pem 格式重新格式化為與 .NET 或 Java 相容的格式,請立即執行此操作。如需詳細資訊,請參閱重新格式化私有金鑰 (僅限 NET和 Java)。
-
請編寫您的應用程式以發送三個
Set-Cookie
標頭給已核准的瀏覽者。您需要三個Set-Cookie
標頭,因為每個Set-Cookie
標頭只能包含一個名稱值對,且CloudFront 已簽署的 Cookie 需要三個名稱值對。名稱值組是:CloudFront-Expires
、CloudFront-Signature
和CloudFront-Key-Pair-Id
。在使用者對要控制存取的檔案發出第一次請求之前,這些值必須出現在檢視器。注意
一般而言,建議您排除
Expires
和Max-Age
屬性。排除這些屬性會導致瀏覽器在使用者關閉瀏覽器時刪除 Cookie,從而降低有人未經授權存取您的內容的可能性。如需詳細資訊,請參閱防止已簽章 Cookie 的濫用。Cookie 屬性的名稱區分大小寫。
只包含分行符號,以使屬性更易讀。
Set-Cookie: CloudFront-Expires=
date and time in Unix time format (in seconds) and Coordinated Universal Time (UTC)
; Domain=optional domain name
; Path=/optional directory path
; Secure; HttpOnly Set-Cookie: CloudFront-Signature=hashed and signed version of the policy statement
; Domain=optional domain name
; Path=/optional directory path
; Secure; HttpOnly Set-Cookie: CloudFront-Key-Pair-Id=public key ID for the CloudFront public key whose corresponding private key you're using to generate the signature
; Domain=optional domain name
; Path=/optional directory path
; Secure; HttpOnly- (選用)
Domain
-
請求檔案的網域名稱。如果您未指定
Domain
屬性,則預設值為 中的網域名稱URL,且僅適用於指定的網域名稱,而不是子網域。如果指定Domain
屬性,它也適用於子網域名稱。網域名稱中的前導點 (例如Domain=.example.com
) 是可選的。此外,如果您指定Domain
屬性,則 中的網域名稱URL和Domain
屬性的值必須相符。您可以指定 CloudFront 指派給分佈的網域名稱,例如 d111111abcdef8.cloudfront.net,但無法為網域名稱指定 *.cloudfront.net。
如果您想要在 中使用替代網域名稱,例如 example.comURLs,無論您是否指定
Domain
屬性,都必須將替代網域名稱新增至您的分佈。如需詳細資訊,請參閱 分佈設定參考 主題中的 替代網域名稱 (CNAMEs)。 - (選用)
Path
-
請求檔案的路徑。如果您未指定
Path
屬性,則預設值為 中的路徑URL。 Secure
-
在檢視器傳送請求之前,需要對 Cookie 進行加密。建議您透過HTTPS連線傳送
Set-Cookie
標頭,以確保 Cookie 屬性免於 man-in-the-middle遭受攻擊。 HttpOnly
-
定義瀏覽器 (在支援的情況下) 如何與 Cookie 值互動。使用 時
HttpOnly
, Cookie 值無法存取 JavaScript。此預防措施有助於緩解跨網站指令碼 (XSS) 攻擊。如需詳細資訊,請參閱使用 HTTP Cookie。 CloudFront-Expires
-
以 Unix 時間格式 (以秒為單位) 和國際標準時間 () 指定到期日期和時間UTC。例如,2013 年 1 月 1 日上午 10:00 會以 Unix 時間格式UTC轉換為 1357034400。若要使用 epoch 時間,請將 32 位元整數用於不晚於 2147483647 的日期 (2038 年 1 月 19 日 03:14:07UTC)。如需 的相關資訊UTC,請參閱 RFC 3339,網際網路上的日期和時間:時間戳記 、https://tools.ietf.org/html/rfc3339
。 CloudFront-Signature
-
JSON 政策陳述式的雜湊、簽章和 base64 編碼版本。如需詳細資訊,請參閱為使用固定政策的已簽章 Cookie 建立簽章。
CloudFront-Key-Pair-Id
-
CloudFront 公有金鑰的 ID,例如
K2JCJMDEHXQW5F
。公有金鑰 ID 會說明要使用 CloudFront 哪個公有金鑰來驗證簽署的 URL. CloudFront compars 簽章中的資訊與政策陳述式中的資訊,以確認 URL 尚未遭到竄改。此公有金鑰必須屬於分佈中信任的簽署者金鑰群組。如需詳細資訊,請參閱指定可以建立已簽署URLs和已簽署 Cookie 的簽署者。
- (選用)
下列範例顯示當您在 中為檔案使用與分佈相關聯的網域名稱時,一個已簽署 Cookie URLs的Set-Cookie
標頭:
Set-Cookie: CloudFront-Expires=1426500000; Domain=d111111abcdef8.cloudfront.net; Path=/images/*; Secure; HttpOnly Set-Cookie: CloudFront-Signature=yXrSIgyQoeE4FBI4eMKF6ho~CA8_; Domain=d111111abcdef8.cloudfront.net; Path=/images/*; Secure; HttpOnly Set-Cookie: CloudFront-Key-Pair-Id=K2JCJMDEHXQW5F; Domain=d111111abcdef8.cloudfront.net; Path=/images/*; Secure; HttpOnly
下列範例顯示當您在 中使用替代網域名稱 example.org 作為檔案時,一個已簽署 Cookie URLs的Set-Cookie
標頭:
Set-Cookie: CloudFront-Expires=1426500000; Domain=example.org; Path=/images/*; Secure; HttpOnly Set-Cookie: CloudFront-Signature=yXrSIgyQoeE4FBI4eMKF6ho~CA8_; Domain=example.org; Path=/images/*; Secure; HttpOnly Set-Cookie: CloudFront-Key-Pair-Id=K2JCJMDEHXQW5F; Domain=example.org; Path=/images/*; Secure; HttpOnly
如果您想要在 中使用替代網域名稱,例如 example.comURLs,無論您是否指定 Domain
屬性,都必須將替代網域名稱新增至您的分佈。如需詳細資訊,請參閱 分佈設定參考 主題中的 替代網域名稱 (CNAMEs)。
為使用固定政策的已簽章 Cookie 建立簽章
若要為使用固定政策的已簽章 Cookie 建立簽章,請完成下列程序。
為使用固定政策的已簽章 Cookie 建立政策陳述式
當您設定使用標準政策的簽章 Cookie 時,該 CloudFront-Signature
屬性是政策聲明的雜湊及已簽章的版本。對於使用標準政策的已簽章的 Cookie,您不會將政策聲明包括在 Set-Cookie
標頭中,就像使用自訂政策的已簽章的 Cookie 一樣。若要建立政策陳述式,請完成下列步驟。
為使用標準政策的已簽章的 Cookie 建立政策聲明
-
使用下列JSON格式和 UTF-8 字元編碼來建構政策陳述式。完全按照規定包含所有標點符號和其他常值。如需有關
Resource
和DateLessThan
參數的詳細資訊,請參閱 您在政策陳述式中為已簽署 Cookie 標準政策所指定的值。{ "Statement": [ { "Resource": "base URL or stream name", "Condition": { "DateLessThan": { "AWS:EpochTime": ending date and time in Unix time format and UTC } } } ] }
-
從政策陳述式中移除所有空格 (包括標籤和新行字元)。您可能必須在應用程式的程式碼的字串中包含逸出字元。
您在政策陳述式中為已簽署 Cookie 標準政策所指定的值
當您為標準政策建立政策聲明時,您可以指定以下值:
- 資源
-
URL 包含查詢字串的基本,如果有的話,例如:
https://d111111abcdef8.cloudfront.net/images/horizon.jpg?size=large&license=yes
您只能為
Resource
指定一個值。注意下列事項:
-
通訊協定 – 此值必須以
http://
或https://
開頭。 -
查詢字串參數 – 如果沒有查詢字串參數,請省略問號。
-
替代網域名稱 – 如果您在 中指定替代網域名稱 (CNAME)URL,則必須在參考網頁或應用程式中的檔案時指定替代網域名稱。請勿URL為 檔案指定 Amazon S3。
-
- DateLessThan
-
以 Unix 時間格式 (以秒為單位) 和國際標準時間 () URL表示的過期日期和時間UTC。不要將值括在引號中。
例如,2015 年 3 月 16 日上午 10:00 會以 Unix 時間格式UTC轉換為 1426500000。
這個值必須符合
CloudFront-Expires
標頭中Set-Cookie
屬性的值。不要將值括在引號中。如需詳細資訊,請參閱 當 CloudFront 檢查已簽署 Cookie 中的過期日期和時間時。
標準政策的範例政策陳述式
當您在已簽署的 Cookie 中使用下列範例政策陳述式時,使用者可以存取 檔案,https://d111111abcdef8.cloudfront.net/horizon.jpg
直到 2015 年 3 月 16 日上午 10:00UTC:
{ "Statement": [ { "Resource": "https://d111111abcdef8.cloudfront.net/horizon.jpg?size=large&license=yes", "Condition": { "DateLessThan": { "AWS:EpochTime": 1426500000 } } } ] }
簽署政策陳述式,為使用固定政策的已簽章 Cookie 建立簽章
要為 CloudFront-Signature
標頭中的 Set-Cookie
屬性建立值,請對您在 為使用標準政策的已簽章的 Cookie 建立政策聲明 中建立的政策聲明進行雜湊和簽署。
如需有關如何對政策聲明進行雜湊、簽章和編碼的詳細資訊和範例,請參閱以下主題:
使用標準政策為已簽章的 Cookie 建立簽章
-
使用 SHA-1 雜湊函數 和 RSA 來雜湊和簽署您在程序 中建立的政策陳述式為使用標準政策的已簽章的 Cookie 建立政策聲明。使用不再包含空格的政策陳述式版本。
對於雜湊函數所需的私有金鑰,使用其公有金鑰在活動的信任金鑰組中的私有金鑰進行分佈。
注意
用於雜湊和簽名政策聲明的方法取決於您的程式設計語言和平台。如需程式碼範例,請參閱 建立已簽署簽章的程式碼範例 URL。
-
從雜湊字串和簽署字串中移除空格 (包括標籤和新行字元)。
-
Base64-encode來編碼字串。 MIME如需詳細資訊,請參閱 20Base64 Content-Transfer-Encoding
4,(多用途網際網路郵件延伸)第一部分:網際網路訊息機構格式。 RFC MIME -
將URL查詢字串中無效的字元取代為有效字元。下表列出無效和有效的字元。
取代這些無效的字元 有了這些有效的字元 +
- (連字號)
=
_ (底線)
/
~ (波狀符號)
-
將結果值包含在
Set-Cookie
名稱值組的CloudFront-Signature
標頭中。然後返回到 使用標準政策設定已簽章的 Cookie 為Set-Cookie
新增CloudFront-Key-Pair-Id
標頭。