URL鑒權功能主要用于保護用戶站點資源不被非法站點下載或盜用。阿里云CDN為您提供了四種鑒權方式,本文為您詳細介紹鑒權方式F的原理和示例說明。
原理說明
鑒權方式F加密URL構成
訪問URL格式:
http://DomainName/FileName?{sign=<md5hash>&time=<timestamp>}
說明{}
中的內容表示在標準URL基礎上添加的加密信息。訪問URL中不能包含中文。
不支持包含
?
帶參數的URL鑒權。
鑒權字段說明
字段
描述
DomainName
CDN站點的域名。
PrivateKey
用戶自定義鑒權key,由16~32個字符(支持大寫字母、小寫字母、數字)組成。
FileName
實際回源訪問的URL,鑒權時Filename需以
/
開頭。timestamp
簽算服務器生成鑒權URL的時間,與鑒權URL有效時長共同控制鑒權URL的失效時間。時間點取自簽算服務器的Unix時間戳(Unix時間戳是從UTC時間1970年01月01日00時00分00秒到現在的總秒數,是十進制的整型正數,固定長度為10,與時區無關),以十六進制形式表示。
說明多數情況下,鑒權URL的有效時長為CDN配置有效時長。有時在簽算增加鑒權URL的有效時長的,此時,timestamp=Unix時間戳+增加的時長;鑒權URL實際有效時長=timestamp+CDN配置的時長。
md5hash
通過MD5算法計算出的字符串,由數字0~9和小寫英文字母a~z混合組成,固定長度32。
md5hash
的值通過以下字符串計算得到。sstring = "Privatekey+URI+timestamp" (URI是用戶的請求對象相對地址,不包含參數,如/Filename) md5hash = md5sum(sstring)
鑒權邏輯說明
CDN服務器接到資源訪問請求后,判斷最終生成鑒權URL請求中的
timestamp
+鑒權URL有效時長
是否小于當前時間。如果
timestamp
+鑒權URL有效時長
小于當前時間,服務器判定過期失效,并返回HTTP 403錯誤。如果
timestamp
+鑒權URL有效時長
大于當前時間,則以string
方式構造出一個字符串,然后使用MD5算法算出md5hash
的值,再將計算出的md5hash
值與用戶訪問請求中攜帶的md5hash
的值進行比對。結果一致,鑒權通過,返回資源請求。
說明當鑒權通過時,會去掉URL中與鑒權相關的那部分參數,可以提高緩存命中率,減少回源流量:
格式1和格式2,實際生成緩存key的URL格式:
http://DomainName/FileName
格式1和格式2,實際回源的URL格式:
http://DomainName/FileName
結果不一致,鑒權失敗,返回HTTP 403錯誤。
鑒權URL示例
通過以下示例說明,您可以準確理解鑒權方式F的實現方式。
示例條件
回源請求對象:
http://domain.example.com/test.flv
說明如果您的回源請求對象中有中文漢字,請先對其進行URL轉碼(即Encode),再進行鑒權URL的拼接。
原始URL:
https://example.com/image/阿里云.jpg
編碼后的URL:
https://example.com/image/%E9%98%BF%E9%87%8C%E4%BA%91.jpg
PrivateKey取值:
aliyuncdnexp1234
。timestamp取值:
55CE8100
。
拼接流程
CDN服務器構造一個用于計算
md5hash
的簽名字符串。aliyuncdnexp1234/test.flv55CE8100
根據該簽名字符串,CDN服務器會計算出
md5hash
。md5hash = md5sum(aliyuncdnexp1234/test.flv55CE8100) = a37fa50a5fb8f71214b1e7c95ec7a1bd
生成鑒權URL。
鑒權URL格式:
http://domain.example.com/test.flv?sign=a37fa50a5fb8f71214b1e7c95ec7a1bd&time=55CE8100
當使用客戶端提供的加密URL進行訪問時,如果CDN服務器計算出來的md5hash
值與訪問請求中帶的md5hash
值相同,都為a37fa50a5fb8f71214b1e7c95ec7a1bd,并且鑒權URL在有效期內,則鑒權通過,反之鑒權失敗。