為防止網站資源被惡意下載盜用,除了通過配置訪問Referer黑名單和白名單來實現對訪客身份的識別和過濾,您還可以採用URL鑒權,更安全有效地保護使用者來源站點資源。本文介紹URL鑒權、原理、使用方式和注意事項。
使用方法
控制台:URL鑒權支援預設鑒權和自訂鑒權兩種方式。
重要可通過控制台配置URL鑒權自訂主KEY和副KEY,兩者擁有同樣的效力,副KEY主要用於平滑更換。
若主KEY執行更換,所有使用主KEY產生的播放地址會立即失效。副KEY作為主KEY更換時,使用主KEY的播放地址不會馬上中斷,副KEY可以繼續替代主KEY提供服務。
代碼拼接鑒權URL。
鑒權URL組成
鑒權URL適用於PC端、移動端、第三方推流和播放工具。由直播推流地址或播放地址+鑒權串
組成,樣本如下:
rtmp://DomainName/AppName/StreamName?auth_key=timestamp-rand-uid-md5hash
鑒權URL | 描述 |
| 直播推流地址或播流地址,更多資訊,請參見產生推流地址和播放地址。 |
| 鑒權串,包含timestamp、rand、uid、md5hash4個欄位,欄位描述如下。 |
timestamp | 鑒權URL的失效時間,由產生鑒權URL的時間,與鑒權URL有效時間長度共同控制。使用UNIX時間戳記表示(單位:秒)。
|
rand | 隨機數,一般為0。 如要確保每次產生的URL不同,建議使用UUID格式,不能包含中劃線(-),如: |
uid | 附加參數,暫未使用,一般為0。 |
md5hash | 通過md5演算法計算出的驗證串。數字和小寫英文字母混合0~9、a~z,固定長度32。
說明 使用控制台產生鑒權URL和使用代碼拼接鑒權URL的 |
功能原理
當開啟URL鑒權功能後,伺服器擷取請求後會進行如下驗證:
判斷請求中的失效時間是否小於目前時間。
如果小於目前時間,則認為到期失效並返回HTTP 403錯誤。
如果大於目前時間,則構造出一個同樣的字串(參見下文sstring構造方式)。
使用MD5演算法算出HashValue,再和請求中帶來的md5hash進行比對。
比對結果一致,則認為鑒權通過,返回直播流。
否則鑒權失敗,返回HTTP 403錯誤。
HashValue是通過以下字串計算出來的:
sstring = "URI-timestamp-rand-uid-PrivateKey"
HashValue = md5sum(sstring)
樣本說明
假設情況:
通過req_auth請求對象,
rtmp://demo.aliyundoc.com/video/standard****
。鑒權KEY設定為:aliyunliveexp1234(控制台設定的主KEY或副KEY,由使用者自行設定)。
產生鑒權URL時間為:北京時間2021年05月28日16:49:57。
控制台中,鑒權URL設定的有效時間長度為40分鐘。
rand和uid欄位都設定為0。
則:
計算出來的鑒權URL的Unix時間戳記為1622194197(北京時間2021年05月28日17:29:57)。
伺服器會構造一個用於計算Hashvalue的簽名字串。
/video/standard-1622194197-0-0-aliyunliveexp1234
伺服器會根據該簽名字串計算HashValue。
HashValue = md5sum("/video/standard-1622194197-0-0-aliyunliveexp1234") = 5552ff52b5e4e20387c6dc18afce****
請求時URL為
rtmp://demo.aliyundoc.com/video/standard****?auth_key=1622194197-0-0-5552ff52b5e4e20387c6dc18afce****
說明auth_key即為鑒權URL所帶的鑒權資訊。
計算出來的HashValue與使用者請求中帶的
md5hash = 5552ff52b5e4e20387c6dc18afce****
值一致,於是鑒權通過。
注意事項
鑒權功能預設為開啟狀態,建議您保持預設開啟狀態,否則會出現直播被盜錄、盜播的風險。如果您想要關閉鑒權功能,需要瞭解盜刷風險並在控制台URL鑒權頁面簽署《關閉URL鑒權免責協議》。
鑒權功能預設為開啟狀態,但是配置鑒權auth_key參數必須需要業務端根據鑒權原理自行實現,暫時沒有提供API介面計算鑒權auth_key參數。
開啟鑒權後推流或播流地址均需要添加鑒權auth_key參數才可正常播放。暫時不支援僅推流或者播流一個地址開啟鑒權的功能。
鑒權URL提供的是到期時間戳記的限制,即在該時間段內該地址可以一直訪問,不會有任何限制,鑒權還無法實現設定某個URL僅能夠一次訪問的功能。
鑒權auth_key參數是根據去掉queryString後的URI計算MD5值後拼接得到的,參見前述設定鑒權參數小節。因此,推流和播流地址的URI均為AppName/StreamName。建議使用者商務邏輯中如果推流地址有泄漏的情況下設定到期時間戳記在業務功能內盡量短一些,避免播流地址被惡意訪問。
針對RTMP、FLV、RTS格式的推播流地址鑒權僅會在推流或者播流開始的時候進行驗證,在推流或者播流過程中不會驗證,即推流或者播流過程中如果超過了鑒權時間戳記也可以繼續播放。
針對M3U8格式的播流地址鑒權會在播流開始以及播流過程中進行驗證,即在播流過程中如果超過了鑒權時間戳記,M3U8格式的播流地址將不能正常播放。