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