功能介紹

URL鑒權功能旨在保護使用者網站的內容資源不被非法網站下載盜用。採用防盜鏈方法添加 Referer 黑、白名單方式可以解決部分盜鏈問題。但是,由於 Referer 內容可以偽造,Referer 防盜鏈方式尚不能完全保護網站資源,因此採用URL鑒權方式保護使用者來源站點資源更為安全有效。

工作原理

URL鑒權功能是通過阿里雲CDN加速節點與客戶資來源站點點配合,實現的一種 更為安全可靠的來源站點資源防盜方法。
  1. 由CDN客戶網站提供給使用者加密 URL(包含許可權驗證資訊)。
  2. 使用者使用加密後的 URL 向加速節點發起請求。
  3. 加速節點對加密 URL 中的許可權資訊進行驗證以判斷請求的合法性,正常響應合法請求,拒絕非法請求,從而有效保護CDN客戶網站資源。

URL鑒權方式

阿里雲CDN 相容並支援A、B、C三種鑒權方式,使用者可以根據自己的業務情況,選擇合適的鑒權方式,來實現對來源站點資源的有效保護。

原理說明

使用者訪問加密 URL 構成
http://DomainName/Filename?auth_key=timestamp-rand-uid-md5hash
鑒權欄位描述
说明 PrivateKey 欄位使用者可以自行設定。
有效時間1800s指,使用者訪問客戶原始伺服器時間超過自訂失效時間(timestamp欄位指定)的1800s後,該鑒權失效。 ,例如使用者佈建訪問時間為 2020-08-15 15:00:00,則連結真正失效時間為2020-08-15 15:30:0
欄位 描述
timestamp 失效時間,整形正數,固定長度10,1970年1月1日以來的秒數。用來控制失效時間,10位整數,有效時間1800s。
rand 隨機數,一般設成0
uid 暫未使用(設定成0即可)
md5hash 通過md5演算法計算出的驗證串,數字和小寫英文字母混合0-9a-z,固定長度32
0。
鑒權步驟
  1. CDN伺服器拿到請求後,首先會判斷請求中的 timestamp 是否小於目前時間。
    • 如果 timestamp 大於目前時間,則構造出一個同樣的字串(參考以下sstring構造方式)。
  2. 使用MD5演算法算出 HashValue ,再和請求中帶來的 md5hash 進行比對。
    • 比對結果一致,則認為鑒權通過,返迴文件。
    • 比對結果不一致,鑒權失敗,返回HTTP 403錯誤。
    说明 HashValue 是通過以下字串計算出來的:
    sstring = "URI-Timestamp-rand-uid-PrivateKey" (URI是使用者的請求對象相對位址,不包含參數,如 /Filename)
    HashValue = md5sum(sstring)
樣本說明
  1. 通過 req_auth 請求對象:
    http:// cdn.example.com/video/standard/1K.html
  2. 密鑰設為:aliyuncdnexp1234 (由使用者自行設定)。
  3. 鑒權設定檔失效日期為 2015年10月10日00:00:00,計算出來的秒數為1444435200。
  4. 則CDN伺服器會構造一個用於計算Hashvalue的簽名字串:
    /video/standard/1K.html-1444435200-0-0-aliyuncdnexp1234"
  5. CDN伺服器會根據該簽名字串計算HashValue:
    HashValue = md5sum("/video/standard/1K.html-1444435200-0-0-aliyuncdnexp1234") = 80cd3862d699b7118eed99103f2a3a4f
  6. 則請求時url為:
    http://cdn.example.com/video/standard/1K.html?auth_key=1444435200-0-0-80cd3862d699b7118eed99103f2a3a4f

計算得出的HashValue與使用者請求中帶的 md5hash = 80cd3862d699b7118eed99103f2a3a4f 值一致,鑒權通過。

原理說明

使用者訪問加密 URL 格式
  • 使用者訪問的 URL 如下:
    http://DomainName/timestamp/md5hash/FileName

    加密URL的構造:網域名稱 + 產生URL的時間(精確到分鐘)(timestamp) + md5值 (md5hash)。最後拼接回原始伺服器的真實路徑(FileName),URL有效時間為1800s。

  • 當鑒權通過時,實際回源的URL是:
    http://DomainName/FileName
鑒權欄位描述
说明 PrivateKey由CDN客戶自行設定。
有效時間1800s是指,使用者訪問客戶原始伺服器時間超過自訂失效時間(timestamp欄位指定)的1800s後,該鑒權失效。例如使用者佈建訪問時間為 2020-08-15 15:00:00,連結真正失效時間為 2020-08-15 15:30:00。
欄位 描述
DomainName CDN客戶網站的網域名稱
timestamp 資源失效時間,作為URL的一部分,同時作為計算 md5hash 的一個因子,格式為: YYYYMMDDHHMM ,有效時間1800s
md5hash 以timestamp、FileName和預先設定好的 PrivateKey 共同做MD5獲得的字串,即 md5(PrivateKey + timestamp + FileName)
FileName 實際回源訪問的URL (注意,鑒權時候FileName要以/開頭)
樣本說明
  1. 回源請求對象:
    http://cdn.example.com/4/44/44c0909bcfc20a01afaf256ca99a8b8b.mp3
  2. 密鑰設為:aliyuncdnexp1234 (使用者自行設定)。
  3. 使用者訪問客戶原始伺服器時間為 201508150800(格式為: YYYYMMDDHHMM)。
  4. 則CDN伺服器會構造一個用於計算 md5hash 的簽名字串:
    aliyuncdnexp1234201508150800/4/44/44c0909bcfc20a01afaf256ca99a8b8b.mp3
  5. 伺服器會根據該簽名字串計算 md5hash:
    md5hash = md5sum("aliyuncdnexp1234201508150800/4/44/44c0909bcfc20a01afaf256ca99a8b8b.mp3") = 9044548ef1527deadafa49a890a377f0
  6. 請求CDN時url:
    http://cdn.example.com/201508150800/9044548ef1527deadafa49a890a377f0/4/44/44c0909bcfc20a01afaf256ca99a8b8b.mp3

計算出來的 md5hash 與使用者請求中帶的 md5hash = 9044548ef1527deadafa49a890a377f0 值一致,鑒權通過。

原理說明

使用者訪問加密 URL 格式
  • 格式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 值為:
md5hash = md5sum(aliyuncdnexp1234/test.flv55CE8100) = a37fa50a5fb8f71214b1e7c95ec7a1bd

明文:timestamp = 55CE8100

這樣產生加密 URL:

格式1
http://cdn.example.com/a37fa50a5fb8f71214b1e7c95ec7a1bd/55CE8100/test.flv
格式2
http://cdn.example.com/test.flv?KEY1=a37fa50a5fb8f71214b1e7c95ec7a1bd&KEY2=55CE8100

樣本說明

使用者使用加密的 URL 訪問加速節點,CDN伺服器會先把加密串 1 提取出來, 並得到原始的 URL 的 <FileName> 部分,使用者訪問時間,然後按照定義的商務邏輯進行驗證:
  1. 使用原始的 URL 中的 <FileName> 部分,請求時間及 PrivateKey 進行 MD5 加密,得到一個加密串。
  2. 比較加密串 2 與加密串 1 是否一致,如果不一致則拒絕。
  3. 取加速節點伺服器目前時間,並與從存取 URL 中所帶的明文時間相減,判斷是否超過設定的時限 t(時間域值 t 預設為 1800s)。
  4. 有效時間1800s是指,使用者訪問客戶原始伺服器時間超過自訂時間的1800s後,該鑒權失效。

    例如使用者佈建訪問時間2020-08-15 15:00:00,連結真正失效時間是2020-08-15 15:30:00。

  5. 時間差小於設定時限的為合法請求,CDN加速節點才會給予正常的響應,否則拒絕該請求,返回 http 403錯誤。

URL鑒權程式碼範例

請查看CDN周邊工具中 鑒權程式碼範例 文檔。

操作步驟

  1. 網域名稱管理 頁,選擇網域名稱,單擊 配置
  2. 存取控制 > URL鑒權 欄,單擊 修改配置
  3. 自訂設定參數。