URL鑒權功能主要用於保護使用者網站資源不被非法網站下載盜用。阿里雲CDN為您提供了三種鑒權方式,本文為您詳細介紹鑒權方式A的原理和樣本說明。

鑒權流程

  • CDN開啟URL鑒權:鑒權通過後,會去掉用戶端發起的請求URL中的鑒權參數,把用戶端發起的請求URL(帶鑒權參數)還原為原始URL,然後使用原始URL來產生緩衝key或者發起回源請求。 开启
  • CDN關閉URL鑒權:CDN關閉URL鑒權,與此同時,用戶端上發起的請求URL裡面也要去掉鑒權參數,否則,如果CDN上的URL鑒權功能已經關閉了,但是用戶端發起的請求URL裡面依然攜帶鑒權參數的話,就會導致CDN無法把用戶端發起的請求URL(帶鑒權參數)還原為原始URL,最終所有請求都無法命中緩衝,均會透傳回來源站點,導致來源站點的流量大漲,同時也會增加來源站點的流量費用。 关闭

原理說明

訪問加密URL構成:

     http://DomainName/Filename?auth_key=timestamp-rand-uid-md5hash
    
當鑒權通過時,會去掉URL中與鑒權相關的那部分參數(提高快取命中率,減少回源流量):
  • 實際產生緩衝key的URL格式:
    
           http://DomainName/FileName
          
  • 實際回源的URL格式:
    
           http://DomainName/FileName
          
鑒權欄位描述如下表所示。
欄位 描述
DomainName CDN網站的網域名稱。
Filename 實際回源訪問的URL,鑒權時Filename需以正斜線( / )開頭。
auth_key 您設定的鑒權密鑰。
timestamp 伺服器端返回資料的時間,即應用服務端產生URL連結的時間。時間點取的是伺服器端的時間(UTC時間),需要轉換為十進位整型正數,固定長度為10,用來控制鑒權URL的失效時間。 鑒權Key有效時間 由使用者在CDN控制台上設定,如果設定為1800s,您訪問CDN的時間超過timestamp+1800s後,該鑒權URL失效。

例如,伺服器端返回資料的時間為2020-08-15 15:00:00,則連結的真正失效時間為2020-08-15 15:30:00。

rand 隨機數。建議使用UUID,不能包含中劃線(-),例如:477b3bbc253f467b8def6711128c7bec。
uid 使用者ID,暫未使用,設定成0即可。
md5hash 通過MD5演算法計算出的字串,由數字0~9和小寫英文字母a~z混合組成,固定長度為32。
CDN伺服器接到資源訪問請求後,判斷最終產生鑒權URL請求中的 timestamp + 鑒權key的有效時間 是否小於目前時間。
  • 如果 timestamp + 鑒權key的有效時間 小於目前時間,伺服器判定到期失效,並返回HTTP 403錯誤。
  • 如果 timestamp + 鑒權key的有效時間 大於目前時間,構造出一個同樣的字串,參考下方 sstring 字串,然後使用MD5演算法算出 HashValue 的值,再與請求中 md5hash 的值進行比對。
    • 結果一致,鑒權通過,返回資源請求。
    • 結果不一致,鑒權失敗,返回HTTP 403錯誤。
    HashValue 的值通過以下字串計算得到。
    
            sstring = "URI-Timestamp-rand-uid-PrivateKey"(URI是使用者的請求對象相對位址,不包含參數,如/Filename) HashValue = md5sum(sstring)
           

樣本說明

通過以下樣本說明,您可以準確理解鑒權方式A的實現方式。
  1. 回源請求對象。
    
           http://cdn.example.com/video/standard/test.mp4
          
  2. 設定密鑰為:aliyuncdnexp1234。
  3. 伺服器端返回資料的時間戳記Timestamp為2015年10月10日00:00:00,轉換為十進位的整形數值為1444435200。
  4. CDN伺服器會構造一個用於計算 Hashvalue 的簽名字串。
    
           /video/standard/test.mp4-1444435200-0-0-aliyuncdnexp1234
          
  5. 根據該簽名字串,CDN伺服器會計算出 Hashvalue
    
           HashValue = md5sum("/video/standard/1K.html-1444435200-0-0-aliyuncdnexp1234") = 80cd3862d699b7118eed99103f2a3a4f
          
  6. 產生加密URL連結。
    说明 如果您的加密URL中有中文漢字,請先對其進行URL轉碼(即Encode),然後再執行該步驟。
    
           http://cdn.example.com/video/standard/test.mp4?auth_key=1444435200-0-0-80cd3862d699b7118eed99103f2a3a4f
          

如果計算出來的 HashValue 值與請求中帶的 md5hash 值相同,都為 80cd3862d699b7118eed99103f2a3a4f ,則鑒權通過,反之鑒權失敗。