URL鑒權功能主要用於保護使用者網站資源不被非法網站下載盜用。本文介紹阿里雲CDN提供的鑒權方式A的原理和樣本說明。
原理說明
鑒權方式A加密URL構成
http://DomainName/Filename?auth_key={<timestamp>-rand-uid-<md5hash>}
說明{}
中的內容表示在標準URL基礎上添加的加密資訊。鑒權欄位說明
欄位
描述
DomainName
CDN網站的網域名稱。
Filename
實際回源訪問的URL,鑒權時Filename需以正斜線(
/
)開頭。auth_key
您設定的鑒權密鑰。
timestamp
簽算伺服器產生鑒權URL的時間,與鑒權URL有效時間長度共同控制鑒權URL的失效時間。時間點取自簽算伺服器的Unix時間戳記(從1970年01月01日00時00分00秒到現在的總秒數,固定長度為10)。
說明多數情況下,鑒權URL的有效時間長度為CDN配置有效時間長度。有時在簽算增加鑒權URL的有效時間長度的,此時,timestamp=Unix時間戳記+增加的時間長度;鑒權URL實際有效時間長度=timestamp+CDN配置的時間長度。
rand
隨機數。建議使用UUID,不能包含中劃線(-),例如:477b3bbc253f467b8def6711128c7bec。
uid
使用者ID,暫未使用,設定成0即可。
md5hash
通過MD5演算法計算出的32位字串,由數字和小寫字母組成。
計算方法:
sstring = "URI-Timestamp-rand-uid-PrivateKey"(URI是使用者的請求對象相對位址,不包含參數,如/Filename) md5hash = md5sum(sstring)
鑒權邏輯說明
CDN伺服器接到資源訪問請求後,判斷
timestamp
+鑒權URL有效時間長度
是否小於目前時間。如果
timestamp
+鑒權URL有效時間長度
小於目前時間,伺服器判定到期失效,並返回HTTP 403錯誤。如果
timestamp
+鑒權URL有效時間長度
大於目前時間,則以sstring
方式構造出一個字串(參考表格中sstring
構造方式),然後使用MD5演算法算出md5hash
的值,再將計算出的md5hash
值與使用者訪問請求中攜帶的md5hash
的值進行比對。結果一致,鑒權通過,返回資源請求。
說明當鑒權通過時,會去掉URL中與鑒權相關的那部分參數,可以提高快取命中率,減少回源流量:
實際產生緩衝key的URL格式:
http://DomainName/FileName
實際回源的URL格式:
http://DomainName/FileName
結果不一致,鑒權失敗,返回HTTP 403錯誤。
鑒權URL樣本
以下樣本說明鑒權方式A的實現。
樣本條件
回源請求對象:
http://domain.example.com/video/standard/test.mp4
說明如果您的回源請求對象中有中文漢字,請先對其進行URL轉碼(即Encode),再進行鑒權URL的拼接。
原始URL:
https://example.com/image/阿里雲.jpg
編碼後的URL:
https://example.com/image/%E9%98%BF%E9%87%8C%E4%BA%91.jpg
設定密鑰為:aliyuncdnexp1234。
簽算伺服器產生鑒權URL的時間:2015年10月10日08:00:00(UTC+8),轉換為十進位的整型數值為1444435200。
拼接流程
CDN伺服器構造出一個用於計算
md5hash
的簽名字串。/video/standard/test.mp4-1444435200-0-0-aliyuncdnexp1234
根據該簽名字串,CDN伺服器計算出
md5hash
。md5hash = md5sum("/video/standard/test.mp4-1444435200-0-0-aliyuncdnexp1234") = 23bf85053008f5c0e791667a313e28ce
產生鑒權URL。
http://domain.example.com/video/standard/test.mp4?auth_key=1444435200-0-0-23bf85053008f5c0e791667a313e28ce
當使用用戶端提供的加密URL進行訪問時,如果CDN伺服器計算出來的md5hash
值與訪問請求中帶的md5hash
值相同,都為23bf85053008f5c0e791667a313e28ce,並且鑒權URL在有效期間內,則鑒權通過,反之鑒權失敗。