如果您有自己的鑒權伺服器,可以通過配置遠程鑒權,將使用者請求轉寄至您指定的鑒權伺服器,由鑒權伺服器對使用者請求進行校正。
功能介紹
遠程鑒權和URL鑒權的作用一樣,都用於保護資源,讓資源只被授權成功的使用者訪問,非授權使用者將無法訪問。這兩個功能在技術實現方案上有如下差異:
URL鑒權:使用者把網域名稱的鑒權規則下發給CDN節點,由CDN節點完成鑒權的整個資料互動流程。
遠程鑒權:使用者有自己單獨設定的鑒權伺服器,CDN節點收到使用者請求後,需要把使用者請求轉寄給鑒權伺服器完成鑒權,鑒權伺服器由使用者自主管理。
遠程鑒權功能的資料互動流程如下:
序號 | 互動說明 |
① | 使用者發起的資源訪問請求到達CDN節點,請求中攜帶了鑒權參數。例如:
|
② | CDN節點收到使用者請求,將使用者請求直接轉寄(或者經過指定的規則處理後轉寄)給鑒權伺服器。例如:
|
③ | 鑒權伺服器根據使用者請求中攜帶的鑒權參數給出鑒權結果,並返回給CDN節點。 |
④ | CDN節點根據鑒權伺服器返回的鑒權結果執行對應的動作,並返回對應的資料給使用者。 鑒權結果舉例說明如下:
|
注意事項
配置遠程鑒權後,鑒權失敗的請求仍可訪問到CDN節點,但會被CDN節點拒絕並返回403狀態代碼,CDN日誌中仍會記錄用戶端的請求記錄。
由於遠程鑒權,將使用者請求轉寄至您指定的鑒權伺服器,由鑒權伺服器對使用者請求進行校正,因此在惡意請求被CDN節點攔截的同時,會產生少量的流量費用,如果用戶端使用HTTPS協議訪問,還會產生HTTPS請求數費用(因為攔截惡意請求的時候,也同時消耗了CDN節點的處理資源)。
操作步驟
登入CDN控制台。
在左側導覽列,單擊域名管理。
在域名管理頁面,找到目標網域名稱,單擊操作列的管理。
在指定網域名稱的左側導覽列,單擊访问控制。
單擊遠程鑒權頁簽。
開啟遠程鑒權開關,根據介面提示,配置遠程鑒權資訊。
說明開啟遠程鑒權功能後,使用者的每次請求都要轉寄給鑒權伺服器處理,當請求訪問量大時,需考慮鑒權伺服器的壓力和效能。
參數
說明
鑒權伺服器位址
鑒權伺服器對外可以訪問的地址。系統會對您輸入的鑒權伺服器位址進行校正,包括格式校正和值校正。
格式要求
鑒權地址支援HTTP協議和HTTPS協議,格式請參考以下幾種類型:
http://example.com/auth
https://example.com/auth
http://192.0.2.1/auth
https://192.0.2.1/auth
值要求
值不能包含127.0.0.1和localhost,因為這類本地地址屬於無效地址。
要求方法
鑒權伺服器支援的要求方法。支援GET、HEAD和POST這三種要求方法,預設使用GET方法請求。
鑒權檔案類型
所有檔案類型:所有的檔案類型都參與鑒權。
指定檔案類型:僅指定的檔案類型參與鑒權。
指定檔案類型時,如果您輸入多個檔案類型,多個檔案類型用豎線(|)分隔,例如:mp4|flv。
檔案類型區分大小寫,即.jpg和JPG是兩種不同的檔案類型。
URL鑒權參數
保留參數設定
用於控制使用者請求URL中需要參與鑒權的參數。可以選擇保留所有參數、保留指定參數和刪除所有URL參數。
保留指定參數時,多個參數用豎線(|)分隔,例如:user|token。
參數區分大小寫,即key和KEY是兩種不同的參數。
添加自訂參數
為CDN節點轉寄給鑒權伺服器的請求URL添加自訂參數。您可以自訂設定參數和取值,也可以直接使用CDN控制台上預設的變數。
自訂設定參數和取值時,要求如下:
多個參數用豎線(|)分隔,例如:token=$arg_token|vendor=ali_cdn。
參數值區分大小寫,即key和KEY是兩種不同的參數值。
使用預設變數時,您可以提取變數的值添加到CDN轉寄給鑒權伺服器的請求上。
例如,選擇提取變數$http_host,則使用者請求的URL地址會加上host=$http_host,此處的host表示使用者要求標頭中的host值。變數名稱與變數含義的介紹,請參見變數名稱。
要求標頭鑒權參數
保留要求標頭設定
用於控制使用者要求標頭中需要參與鑒權的參數。可以選擇保留所有參數、保留指定參數和刪除所有要求標頭參數。
保留指定參數時,多個要求標頭用豎線(|)分隔,例如:user_agent|referer|cookies。
參數不區分大小寫,即http_remote_addr和HTTP_Remote_Addr一樣。
說明選擇“保留所有參數”時,CDN節點預設會刪除HOST頭,如果您需要保留HOST頭,可通過“保留指定參數”或者“添加自訂參數”來保留。CDN節點預設刪除HOST頭的原因是CDN節點轉寄給鑒權伺服器的鑒權請求中攜帶的HOST頭是加速網域名稱,這可能會導致鑒權伺服器無法識別鑒權請求,從而導致訪問時返回404狀態代碼,導致鑒權失敗。
添加自訂參數
用於CDN節點轉寄給鑒權伺服器的要求標頭添加自訂參數。您可以自訂設定參數和取值,也可以直接使用CDN控制台上預設的變數。
自訂設定參數和取值時,要求如下:
多個要求標頭用豎線(|)分隔,例如:User-Agent=$http_user_agent|vendor=ali_cdn。
參數不區分大小寫,即http_remote_addr和HTTP_Remote_Addr一樣。
使用預設變數時,您可以提取變數的值添加到CDN轉寄給鑒權伺服器的請求上。
例如,選擇提取變數$http_host,則使用者請求的URL地址會加上host=$http_host,此處的host表示使用者要求標頭中的host值。變數名稱與變數含義的介紹,請參見變數名稱。
鑒權結果對應狀態代碼
鑒權成功狀態代碼
說明 鑒權伺服器在鑒權成功時,會向CDN返回特定的HTTP狀態代碼。您可以配置多個狀態代碼,多個狀態代碼之間需用英文逗號分隔。
樣本 若將鑒權成功狀態代碼設定為
200,206,則當鑒權伺服器返回200或206時,表示鑒權成功。異常處理機制 為避免因異常情況導致所有使用者請求被阻斷,如果鑒權伺服器返回的狀態代碼既不屬於成功狀態代碼,也不屬於失敗狀態代碼,CDN節點將預設放過該請求。
鑒權失敗狀態代碼
說明 鑒權伺服器在鑒權失敗時,會向CDN返回特定的HTTP狀態代碼。您可以配置多個狀態代碼,多個狀態代碼之間需用英文逗號分隔。
樣本 若將鑒權失敗狀態代碼設定為
400,403,則當鑒權伺服器返回400或403時,表示鑒權失敗。異常處理機制 為避免因異常情況導致所有使用者請求被阻斷,如果鑒權伺服器返回的狀態代碼既不屬於成功狀態代碼,也不屬於失敗狀態代碼,CDN節點將預設放過該請求。
其他狀態代碼是否允許存取
是:為避免因為一些異常情況阻斷所有的使用者請求,如果鑒權伺服器返回的狀態代碼既不是成功狀態代碼,也不是失敗狀態代碼,CDN節點預設放過使用者請求。
說明例如:
鑒權成功狀態代碼設定為200,鑒權伺服器返回201時,結果為放過使用者請求。
鑒權失敗狀態代碼設定為403,鑒權伺服器返回404時,結果為放過使用者請求。
否:表示在鑒權伺服器返回的狀態代碼既不是成功狀態代碼,也不是失敗狀態代碼的情況下,CDN節點將會拒絕使用者請求。
鑒權失敗之後CDN執行的操作
響應自訂狀態代碼
使用者請求鑒權失敗時,CDN節點返回給使用者的狀態代碼。
例如,將響應自訂狀態代碼設定為403,當使用者請求鑒權失敗時,CDN節點會返回403給使用者。
鑒權逾時配置
鑒權逾時時間長度
統計的是從CDN節點發起鑒權請求開始,到CDN節點收到鑒權伺服器返回的結果為止的時間。單位為毫秒,鑒權逾時時間長度最長可以設定為3000。
鑒權逾時之後的動作
CDN與鑒權伺服器之間的資料互動逾時後,CDN對使用者請求的處理。支援通過和拒絕這兩種動作,區別如下:
通過:鑒權逾時,CDN將直接允許使用者請求。
拒絕:鑒權逾時,CDN拒絕使用者請求,返回上面配置的響應自訂狀態代碼給使用者。
單擊確定,完成配置。
成功配置遠程鑒權功能後,您可以在遠程鑒權頁簽下,對當前的配置進行修改或關閉遠程鑒權功能。
變數名稱
添加自訂參數時,您可以選擇直接使用CDN控制台上預設的變數。變數名稱與變數含義見下表。
變數名稱 | 變數含義 |
$http_host | 要求標頭中的Host值。 |
$http_user_agent | 要求標頭中的User-Agent值。 |
$http_referer | 要求標頭中的Referer值。 |
$http_content_type | 要求標頭中的Content-Type值。 |
$http_x_forward_for | 要求標頭中的X-Forwarded-For值。 |
$remote_addr | 請求的Client IP資訊。 |
$scheme | 請求的協議類型。 |
$server_protocol | 請求的協議版本。 |
$uri | 請求的原始URI。 |
$args | 請求的Query String,不包含問號(?)。 |
$request_method | 要求方法。 |
$request_uri | uri+'?'+args的內容。 |