功能介紹
URL鑒權功能旨在保護使用者網站的內容資源不被非法網站下載盜用。採用防盜鏈方法添加 Referer 黑、白名單方式可以解決部分盜鏈問題。但是,由於 Referer 內容可以偽造,Referer 防盜鏈方式尚不能完全保護網站資源,因此採用URL鑒權方式保護使用者來源站點資源更為安全有效。
工作原理
- 由CDN客戶網站提供給使用者加密 URL(包含許可權驗證資訊)。
- 使用者使用加密後的 URL 向加速節點發起請求。
- 加速節點對加密 URL 中的許可權資訊進行驗證以判斷請求的合法性,正常響應合法請求,拒絕非法請求,從而有效保護CDN客戶網站資源。
URL鑒權方式
阿里雲CDN 相容並支援A、B、C三種鑒權方式,使用者可以根據自己的業務情況,選擇合適的鑒權方式,來實現對來源站點資源的有效保護。
原理說明
http://DomainName/Filename?auth_key=timestamp-rand-uid-md5hash
PrivateKey
欄位使用者可以自行設定。
欄位 | 描述 |
---|---|
timestamp | 失效時間,整形正數,固定長度10,1970年1月1日以來的秒數。用來控制失效時間,10位整數,有效時間1800s。 |
rand | 隨機數,一般設成0 |
uid | 暫未使用(設定成0即可) |
md5hash | 通過md5演算法計算出的驗證串,數字和小寫英文字母混合0-9a-z,固定長度32 |
- CDN伺服器拿到請求後,首先會判斷請求中的
timestamp
是否小於目前時間。- 如果
timestamp
大於目前時間,則構造出一個同樣的字串(參考以下sstring構造方式)。
- 如果
- 使用MD5演算法算出
HashValue
,再和請求中帶來的md5hash
進行比對。- 比對結果一致,則認為鑒權通過,返迴文件。
- 比對結果不一致,鑒權失敗,返回HTTP 403錯誤。
说明HashValue
是通過以下字串計算出來的:sstring = "URI-Timestamp-rand-uid-PrivateKey" (URI是使用者的請求對象相對位址,不包含參數,如 /Filename) HashValue = md5sum(sstring)
- 通過
req_auth
請求對象:http:// cdn.example.com/video/standard/1K.html
- 密鑰設為:aliyuncdnexp1234 (由使用者自行設定)。
- 鑒權設定檔失效日期為 2015年10月10日00:00:00,計算出來的秒數為1444435200。
- 則CDN伺服器會構造一個用於計算Hashvalue的簽名字串:
/video/standard/1K.html-1444435200-0-0-aliyuncdnexp1234"
- CDN伺服器會根據該簽名字串計算HashValue:
HashValue = md5sum("/video/standard/1K.html-1444435200-0-0-aliyuncdnexp1234") = 80cd3862d699b7118eed99103f2a3a4f
- 則請求時url為:
http://cdn.example.com/video/standard/1K.html?auth_key=1444435200-0-0-80cd3862d699b7118eed99103f2a3a4f
計算得出的HashValue與使用者請求中帶的 md5hash = 80cd3862d699b7118eed99103f2a3a4f 值一致,鑒權通過。
原理說明
- 使用者訪問的 URL 如下:
http://DomainName/timestamp/md5hash/FileName
加密URL的構造:網域名稱 + 產生URL的時間(精確到分鐘)(timestamp) + md5值 (md5hash)。最後拼接回原始伺服器的真實路徑(FileName),URL有效時間為1800s。
- 當鑒權通過時,實際回源的URL是:
http://DomainName/FileName
PrivateKey
由CDN客戶自行設定。
欄位 | 描述 |
---|---|
DomainName | CDN客戶網站的網域名稱 |
timestamp | 資源失效時間,作為URL的一部分,同時作為計算 md5hash 的一個因子,格式為: YYYYMMDDHHMM ,有效時間1800s |
md5hash | 以timestamp、FileName和預先設定好的 PrivateKey 共同做MD5獲得的字串,即 md5(PrivateKey + timestamp + FileName ) |
FileName | 實際回源訪問的URL (注意,鑒權時候FileName要以/開頭) |
- 回源請求對象:
http://cdn.example.com/4/44/44c0909bcfc20a01afaf256ca99a8b8b.mp3
- 密鑰設為:aliyuncdnexp1234 (使用者自行設定)。
- 使用者訪問客戶原始伺服器時間為 201508150800(格式為: YYYYMMDDHHMM)。
- 則CDN伺服器會構造一個用於計算 md5hash 的簽名字串:
aliyuncdnexp1234201508150800/4/44/44c0909bcfc20a01afaf256ca99a8b8b.mp3
- 伺服器會根據該簽名字串計算 md5hash:
md5hash = md5sum("aliyuncdnexp1234201508150800/4/44/44c0909bcfc20a01afaf256ca99a8b8b.mp3") = 9044548ef1527deadafa49a890a377f0
- 請求CDN時url:
http://cdn.example.com/201508150800/9044548ef1527deadafa49a890a377f0/4/44/44c0909bcfc20a01afaf256ca99a8b8b.mp3
計算出來的 md5hash 與使用者請求中帶的 md5hash = 9044548ef1527deadafa49a890a377f0 值一致,鑒權通過。
原理說明
- 格式1
http://DomainName/{/}/FileName
- 格式2
http://DomainName/FileName{&KEY1=&KEY2=}
- 花括弧中的內容表示在標準的URL基礎上添加的加密資訊。
<md5hash>
是驗證資訊經過 MD5 加密後的字串。<timestamp>
是未加密的字串,以明文表示。固定長度10,1970年1月1日以來的秒數,表示為十六進位。- 採用格式一進行URL加密,例如:
http://cdn.example.com/a37fa50a5fb8f71214b1e7c95ec7a1bd/55CE8100/test.flv
<md5hash>
為 a37fa50a5fb8f71214b1e7c95ec7a1bd<timestamp>
為 55CE8100。
鑒權欄位描述
<md5hash>
部分欄位描述:
欄位 | 描述 |
---|---|
PrivateKey | 幹擾串,不同客戶採用不同的幹擾串 |
FileName | 實際回源訪問的URL (注意,鑒權時候path要以/開頭) |
time | 使用者訪問原始伺服器時間,取 UNIX 時間,以十六進位數字字元表示。 |
PrivateKey 取值: aliyuncdnexp1234
FileName 取值: /test.flv
time 取值: 55CE8100
md5hash = md5sum(aliyuncdnexp1234/test.flv55CE8100) = a37fa50a5fb8f71214b1e7c95ec7a1bd
明文:timestamp = 55CE8100
這樣產生加密 URL:
http://cdn.example.com/a37fa50a5fb8f71214b1e7c95ec7a1bd/55CE8100/test.flv
http://cdn.example.com/test.flv?KEY1=a37fa50a5fb8f71214b1e7c95ec7a1bd&KEY2=55CE8100
樣本說明
<FileName>
部分,使用者訪問時間,然後按照定義的商務邏輯進行驗證:
- 使用原始的 URL 中的
<FileName>
部分,請求時間及 PrivateKey 進行 MD5 加密,得到一個加密串。 - 比較加密串 2 與加密串 1 是否一致,如果不一致則拒絕。
- 取加速節點伺服器目前時間,並與從存取 URL 中所帶的明文時間相減,判斷是否超過設定的時限 t(時間域值 t 預設為 1800s)。
-
有效時間1800s是指,使用者訪問客戶原始伺服器時間超過自訂時間的1800s後,該鑒權失效。
例如使用者佈建訪問時間2020-08-15 15:00:00,連結真正失效時間是2020-08-15 15:30:00。
- 時間差小於設定時限的為合法請求,CDN加速節點才會給予正常的響應,否則拒絕該請求,返回 http 403錯誤。
URL鑒權程式碼範例
請查看CDN周邊工具中 鑒權程式碼範例 文檔。
操作步驟
- 在 網域名稱管理 頁,選擇網域名稱,單擊 配置。
- 在 修改配置。 欄,單擊
- 自訂設定參數。