使用令牌驗證保護 Azure 內容傳遞網路 資產
重要
這是僅限來自 Edgio 的 Azure CDN 進階版 功能,若要從 Microsoft 設定 Azure CDN 上的規則,請使用標準規則引擎。 來自 Akamai 的 Azure CDN 無法使用進階規則。 如需 CDN 功能的完整比較,請參閱 Azure CDN 產品功能。
概觀
令牌驗證是一種機制,可讓您防止 Azure 內容傳遞網路將資產服務至未經授權的用戶端。 令牌驗證通常是為了防止 內容熱連結 ,其中不同的網站,例如消息板,在未經許可的情況下使用您的資產。 Hotlinking 可能會對內容傳遞成本產生影響。 當您在內容傳遞網路上啟用令牌驗證時,要求會在內容傳遞網路傳遞內容之前由內容傳遞網路邊緣伺服器進行驗證。
運作方式
令牌驗證會要求包含令牌值,以驗證信任網站所產生的要求是否會產生要求,而令牌值會保存要求者的相關編碼資訊。 只有在編碼的資訊符合需求時,才會將內容提供給要求者;否則會拒絕要求。 您可以使用下列一或多個參數來設定需求:
- 國家/地區:允許或拒絕源自其 國家/地區代碼所指定國家/地區的要求。
- URL:只允許符合指定資產或路徑的要求。
- 主機:允許或拒絕在要求標頭中使用指定主機的要求。
- 查閱者:允許或拒絕來自指定查閱者的要求。
- IP 位址:只允許源自特定IP位址或IP子網的要求。
- 通訊協議:根據用來要求內容的通訊協議來允許或拒絕要求。
- 到期時間:指派日期和時間期間,以確保連結在有限的時間週期內仍然有效。
如需詳細資訊,請參閱設定令牌驗證中每個參數的詳細組態範例。
重要
如果針對此帳戶上的任何路徑啟用令牌授權,標準快取模式是唯一可用於查詢字串快取的模式。 如需詳細資訊,請參閱使用查詢字串控制 Azure 內容傳遞網路 快取行為。
參考架構
下列工作流程圖表說明內容傳遞網路如何使用令牌驗證來處理 Web 應用程式。
內容傳遞網路端點上的令牌驗證邏輯
下列流程圖說明 Azure 內容傳遞網路 如何在內容傳遞網路端點上設定令牌驗證時驗證用戶端要求。
設定令牌驗證
從 Azure 入口網站 瀏覽至內容傳遞網路配置檔,然後選取 [管理] 以啟動補充入口網站。
將滑鼠停留在 [HTTP 大型] 上方,然後選取飛出視窗中的 [令牌驗證]。 然後,您可以設定加密金鑰和加密參數,如下所示:
建立一或多個加密金鑰。 加密金鑰會區分大小寫,而且可以包含英數位元的任何組合。 不允許任何其他類型的字元,包括空格。 長度上限是 250 個字元。 為了確保加密金鑰是隨機的,建議您使用 OpenSSL 工具來建立它們。
OpenSSL 工具具有下列語法:
rand -hex <key length>
例如:
OpenSSL> rand -hex 32
若要避免停機,請同時建立主要和備份密鑰。 備份金鑰會在更新主鍵時,提供您內容的不間斷存取權。
在 [ 主要金鑰 ] 方塊中輸入唯一的加密金鑰,並選擇性地在 [備份密鑰] 方塊中 輸入備份金鑰 。
從 [ 最低加密版本] 列表中選取每個金鑰的最低加密版本 ,然後選取 [ 更新]:
- V2: 表示金鑰可用來產生 2.0 版和 3.0 版令牌。 只有在您將舊版 2.0 加密金鑰轉換為 3.0 版金鑰時,才使用此選項。
- V3: (建議) 指出金鑰只能用來產生 3.0 版令牌。
使用加密工具來設定加密參數併產生令牌。 透過加密工具,您可以根據到期時間、國家/地區、查閱者、通訊協定和用戶端IP(任意組合)來允許或拒絕要求。 雖然可以組合成標記的參數數目和組合沒有限制,但令牌的總長度限製為 512 個字元。
在 [加密工具 ] 區段中,輸入下列一或多個加密參數的值:
參數名稱 描述 ec_expire 將到期時間指派給令牌,之後令牌就會到期。 在到期時間之後提交的要求會遭到拒絕。 此參數會使用 Unix 時間戳,這是根據標準 Unix epoch '1/1/1970 00:00:00 GMT' 之後的秒數。 (您可以使用線上工具在標準時間與 Unix 時間之間轉換。 例如,如果您想要令牌在 到期
12/31/2016 12:00:00 GMT
,請輸入 Unix 時間戳值1483185600
。ec_url_allow 可讓您針對特定資產或路徑量身打造令牌。 它會限制存取 URL 開頭為特定相對路徑的要求。 URL 會區分大小寫。 以逗號分隔每個路徑,以輸入多個路徑;請勿新增空格。 根據您的需求,您可以設定不同的值,以提供不同的存取層級。 例如,針對 URL
http://www.mydomain.com/pictures/city/strasbourg.png
,下列輸入值允許這些要求:- 輸入值 『/』:允許所有要求。
- 輸入值 '/pictures',允許下列要求:
- 'http://www.mydomain.com/pictures.png'
- 'http://www.mydomain.com/pictures/city/strasbourg.png'
- 'http://www.mydomain.com/picturesnew/city/strasbourgh.png'
- 輸入值 '/pictures/':只允許包含 '/pictures/' 路徑的要求。 例如,'http://www.mydomain.com/pictures/city/strasbourg.png'。
- 輸入值 '/pictures/city/strasbourg.png':只允許此特定路徑和資產的要求。
ec_country_allow 只允許來自一或多個指定國家/地區的要求。 來自所有其他國家/地區的要求會遭到拒絕。 針對每個國家/地區使用兩個字母 [ISO 3166 國家/地區代碼](/舊版/azure/mt761717(v=azure.100)),並以逗號分隔每個國家/地區:請勿新增空格。 例如,如果您想要只允許來自 美國 和法國的存取,請輸入 'US,FR'。 ec_country_deny 拒絕源自一或多個指定國家/地區的要求。 允許來自所有其他國家/地區的要求。 實作與 ec_country_allow 參數相同。 如果國家/地區代碼同時 存在於ec_country_allow 和 ec_country_deny 參數中, 則ec_country_allow 參數會優先使用。 ec_ref_allow 只允許來自指定查閱者的要求。 查閱者會識別連結到所要求資源之網頁的URL。 請勿在參數值中包含通訊協定。 允許下列型態的輸入:
- 主機名或主機名和路徑。
- 多個查閱者。 若要新增多個查閱者,請以逗號分隔每個查閱者;請勿新增空格。 如果您指定查閱者值,但因瀏覽器設定而未在要求中傳送查閱者資訊,則預設會拒絕要求。
- 遺漏或空白查閱者資訊的要求。 根據預設, ec_ref_allow 參數會封鎖這些類型的要求。 若要允許這些要求,請輸入文字「遺漏」或輸入空白值(使用尾端逗號)。
- 子域。 若要允許子域,請輸入星號 (\*)。 例如,若要允許 『contoso.com』 的所有子域,請輸入 『*.contoso.com』。
例如,若要允許存取 來自
www.contoso.com
的要求、下contoso2.com
的所有子域,以及具有空白或遺漏查閱者的要求,請輸入www.contoso.com,*.contoso.com,missing
。ec_ref_deny 拒絕來自指定查閱者的要求。 實作與 ec_ref_allow 參數相同。 如果ec_ref_allow與ec_ref_deny參數中有參照者,則ec_ref_allow參數優先。 ec_proto_allow 只允許來自指定通訊協定的要求。 有效值為 'HTTP'、'https' 或 'http,https'。 ec_proto_deny 拒絕來自指定通訊協定的要求。 實作與 ec_proto_allow 參數相同。 如果通訊協定同時存在於ec_proto_allow和ec_proto_deny參數中,則ec_proto_allow參數優先。 ec_clientip 限制對指定要求者IP位址的存取。 支援因特網通訊協定第 4 版(IPv4)和因特網通訊協定第 6 版(IPv6)。 您可以指定單一要求IP位址或與特定子網相關聯的IP位址。 例如,『11.22.33.0/22』 允許從IP位址 11.22.32.1 到11.22.35.254的要求。 輸入加密參數值之後,請從 [金鑰到加密 ] 清單中選取要加密的金鑰(如果您已建立主要金鑰和備份金鑰)。
從 [加密版本] 列表中選取加密版本 : 第 2 版的 V2 或 第 3 版的 V3 (建議使用)。
選取 [加密 ] 以產生令牌。
產生令牌之後,會顯示在 [產生的令牌] 方塊中。 若要使用令牌,請將它附加為URL路徑中檔案結尾的查詢字串。 例如:
http://www.domain.com/content.mov?a4fbc3710fd3449a7c99986b
。您可以選擇性地使用解密工具來測試令牌,以便檢視令牌的參數。 將令牌值貼到 [令牌至解密] 方塊 中。 從 [要解密 的密鑰] 清單中選取要使用的加密金鑰,然後選取 [ 解密]。
解密令牌之後,其參數會顯示在 [ 原始參數 ] 方塊中。
或者,自定義拒絕要求時所傳回的回應碼類型。 選取 [已啟用],然後從 [ 回應碼] 列表中選取響應碼 。 標頭名稱 會自動設定為 [ 位置]。 選取 [ 儲存 ] 以實作新的回應碼。 針對特定回應碼,您也必須在 [標頭值] 方塊中輸入錯誤頁面的 URL。 默認 會選取 403 回應碼 (禁止)。
在 [HTTP 大型] 底下,選取 [規則引擎]。 您可以使用規則引擎來定義要套用功能的路徑、啟用令牌驗證功能,以及啟用額外的令牌驗證相關功能。 如需詳細資訊,請參閱 規則引擎參考。
選取現有的規則或建立新規則,以定義您要套用令牌驗證的資產或路徑。
若要在規則上啟用令牌驗證,請從 [功能] 列表中選取 [令牌驗證],然後選取 [已啟用]。 如果您要更新規則,請選取 [更新],如果正在建立規則,請選取 [新增]。
在規則引擎中,您也可以啟用更多令牌驗證相關功能。 若要啟用下列任何功能,請從 [功能] 列表中選取它,然後選取 [已啟用]。
令牌驗證拒絕碼: 決定拒絕要求時傳回給使用者的回應類型。 此處設定的規則會覆寫令牌型驗證頁面上 [ 自定義拒絕處理 ] 區段中所設定的響應碼。
令牌驗證忽略 URL 大小寫: 判斷用來驗證令牌的 URL 是否區分大小寫。
令牌驗證參數: 重新命名出現在要求URL中的令牌驗證查詢字串參數。
您可以藉由存取 GitHub 中的原始碼來自定義權杖。 可用的語言包括:
- C
- C#
- PHP
- Perl
- Java
- Python
Azure 內容傳遞網路 功能和提供者定價
如需功能的相關信息,請參閱 Azure 內容傳遞網路 產品功能。 如需定價的相關信息,請參閱 內容傳遞網路 定價。