遠程鑒權功能是一種存取控制功能,用於保護資源。遠程鑒權是指對發送到阿里雲CDN邊緣節點上的使用者請求進行校正,並根據鑒權伺服器返回的校正結果來判斷如何處理使用者的請求。開啟遠程鑒權意味著資源只能被授權成功的使用者訪問。本文介紹遠程鑒權的實現原理及控制台開啟遠程鑒權步驟,並提供相關API參考。
實現原理
ApsaraVideo for VOD服務同時支援URL鑒權和遠程鑒權功能以避免網站資源被非法下載或盜用。這兩個功能在技術實現方案上有如下差異:
URL鑒權:您把網域名稱的鑒權規則下發給CDN節點,由CDN節點完成鑒權的整個資料互動流程。更多關於URL鑒權的資訊,請參見URL鑒權。
遠程鑒權:您需要有自己單獨設定的鑒權伺服器,CDN節點收到需要鑒權的使用者請求後,需要把使用者請求轉寄給鑒權伺服器完成鑒權,鑒權伺服器由您自主管理。
遠程鑒權的實現原理如下:
使用者發起的資源訪問請求到達CDN節點,請求中攜帶了鑒權參數。
CDN節點收到使用者請求,將使用者請求轉寄給鑒權伺服器。
鑒權伺服器根據使用者請求中攜帶的鑒權參數給出鑒權結果,並返回給CDN節點。
CDN節點根據鑒權伺服器返回的鑒權結果來判斷如何處理使用者的請求。鑒權成功即允許訪問,鑒權失敗會拒絕訪問或進行相應的限制。鑒權結果舉例說明如下:
舉例1:鑒權成功,CDN節點與使用者開始正常的快取資料訪問互動。
舉例2:鑒權失敗,CDN節點返回403狀態代碼給使用者。
舉例3:鑒權失敗,CDN節點對使用者訪問進行限速。
舉例4:鑒權逾時,CDN節點執行鑒權逾時的預設動作,即允許存取使用者請求。
使用說明
開啟遠程鑒權功能後,使用者的每次請求都要鑒權,當請求訪問量大時,需考慮鑒權伺服器的壓力和效能。
操作步驟
在點播控制台左側導覽列選擇組態管理。
單擊分發加速配置 > 網域名稱管理,進入網域名稱管理頁面。
選擇您要配置的網域名稱,單擊配置。
單擊存取控制。
單擊遠程鑒權頁簽。
開啟遠程鑒權,配置遠程鑒權資訊。
參數和說明如下表所示:
參數
說明
鑒權伺服器位址
鑒權伺服器對外可以訪問的地址。系統會對您輸入的鑒權伺服器位址進行校正,包括格式校正和值校正。
格式要求
格式必須為以下幾種類型之一:
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這三種要求方法。
POST
參數在請求體中傳輸,地址欄不變。
理論上沒有限制資料轉送的大小。
請求不會被緩衝,也不會被保留在瀏覽器記錄中。
安全性相對較高。
GET
參數在請求行中傳輸,地址欄會顯示提交的參數值。
受瀏覽器限制,資料轉送最大支援1024位元組。
請求可被緩衝,也會被保留在瀏覽器記錄中。
安全性相對較低。
HEAD
HEAD和GET方法相同,只是伺服器響應時,HEAD不返回請求體。
鑒權檔案類型
所有檔案類型:所有的檔案類型都參與鑒權。
指定檔案類型:僅指定的檔案類型參與鑒權。
指定檔案類型時,多個檔案類型用豎線(|)分隔,例如:mp4|flv。
檔案類型區分大小寫,即jpg和JPG是兩種不同的檔案類型。
保留參數設定
用於控制使用者請求URL中需要參與鑒權的參數。可以選擇保留所有參數、保留指定參數和刪除所有URL參數。
保留指定參數時,多個參數用豎線(|)分隔,例如:user|token。
參數區分大小寫,即key和KEY是兩種不同的參數。
添加自訂參數
為CDN節點轉寄給鑒權伺服器的請求URL添加自訂參數。
您可以選擇自訂設定參數和取值,也可以選擇選擇參數直接使用點播控制台上預設的變數。
自訂設定參數和取值時,要求如下:
多個參數用豎線(|)分隔,例如: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節點轉寄給鑒權伺服器的要求標頭添加自訂參數。
您可以選擇自訂來設定參數和取值,也可以選擇選擇參數直接使用點播控制台上預設的變數。
自訂設定參數和取值時,要求如下:
多個要求標頭用豎線(|)分隔,例如:User-Agent=$http_user_agent|vendor=ali_cdn。
參數不區分大小寫,即http_remote_addr和HTTP_Remote_Addr為同一個參數。
使用預設變數時,您可以提取變數的值添加到CDN轉寄給鑒權伺服器的請求上。
例如,選擇提取變數$http_host,則使用者請求的URL地址會加上host=$http_host,此處的host表示使用者要求標頭中的host值。變數名稱與變數含義的介紹,請參見變數名稱。
鑒權成功狀態代碼
鑒權伺服器在鑒權成功時返回的HTTP狀態代碼,即鑒權結果。建議鑒權成功狀態代碼設定為2XX。
例如,將鑒權成功狀態代碼設定為200,當鑒權伺服器返回200時,表示鑒權成功。如果鑒權伺服器返回的狀態代碼不是成功狀態代碼,也不是失敗狀態代碼,結果即為鑒權逾時。
鑒權失敗狀態代碼
鑒權伺服器在鑒權失敗時返回的HTTP狀態代碼,即鑒權結果。建議鑒權失敗狀態代碼設定為4XX。
例如,將鑒權失敗狀態代碼設定為403,當鑒權伺服器返回403時,表示鑒權失敗。如果鑒權伺服器返回的狀態代碼不是成功狀態代碼,也不是失敗狀態代碼,結果即為鑒權逾時。
響應自訂狀態代碼
鑒權伺服器返回鑒權失敗狀態代碼給CDN節點,即使用者請求鑒權失敗時,CDN節點返回給使用者的狀態代碼。
例如,將響應自訂狀態代碼設定為403,當使用者請求鑒權失敗時,CDN節點會返回403給使用者。
逾時時間長度
統計的是從CDN節點發起鑒權請求開始,到CDN節點收到鑒權伺服器返回的結果為止的時間。
單位為毫秒,最長可以設定為3000毫秒。
逾時之後的動作
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_forward_for值。 |
$remote_addr | 請求的client ip資訊。 |
$scheme | 請求的協議類型。 |
$server_protocol | 請求的協議版本。 |
$uri | 請求的原始uri。 |
$args | 請求的Query String,不包含問號(?)。 |
$request_method | 要求方法。 |
$request_uri | uri+'?'+args的內容。 |