如果您有自己的鑒權服務器,可以通過配置遠程鑒權,將用戶請求轉發至您指定的鑒權服務器,由鑒權服務器對用戶請求進行校驗。
功能介紹
遠程鑒權和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,當鑒權服務器返回200時,表示鑒權成功。
為避免因為一些異常情況阻斷所有的用戶請求,如果鑒權服務器返回的狀態碼既不是成功狀態碼,也不是失敗狀態碼,CDN節點默認放過用戶請求(例如:鑒權成功狀態碼設置為200,鑒權服務器返回201時,結果為放過用戶請求)。
鑒權失敗狀態碼
鑒權服務器在鑒權失敗時返回給CDN的HTTP狀態碼。
例如,將鑒權失敗狀態碼設置為403,當鑒權服務器返回403時,表示鑒權失敗。
為避免因為一些異常情況阻斷所有的用戶請求,如果鑒權服務器返回的狀態碼既不是成功狀態碼,也不是失敗狀態碼,CDN節點默認放過用戶請求(例如:鑒權失敗狀態碼設置為403,鑒權服務器返回404時,結果為放過用戶請求)。
其他狀態碼是否放行
是:為避免因為一些異常情況阻斷所有的用戶請求,如果鑒權服務器返回的狀態碼既不是成功狀態碼,也不是失敗狀態碼,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的內容。 |