為防止網站資源被惡意下載盜用,除了通過配置訪問Referer黑名單和白名單來實現對訪客身份的識別和過濾,您還可以使用URL鑒權功能對推播流地址進行鑒權,更安全有效地保護使用者來源站點資源。本文介紹URL鑒權的使用方式,原理、和注意事項。
鑒權URL組成
鑒權URL適用於PC端、移動端、第三方推流和播放工具。由直播推流地址或播放地址+鑒權串組成,樣本如下:
rtmp://push.aliyundoc.com/app/stream?auth_key=1740562218-0-0-183e22e*********參數auth_key即鑒權串。
鑒權串結構
timestamp-rand-uid-md5hashtimestamp:UNIX時間戳記,單位秒,最終失效時間由該值加上網域名稱URL鑒權有效時間長度決定。
使用控制台直播地址產生器產生地址時,timestamp預設為目前時間。即使用直播地址產生器產生地址時,有效期間為:目前時間+網域名稱URL鑒權有效時間長度。
通過代碼自訂產生地址時,可以指定timestamp。比如您設定timestamp為:目前時間+3600秒,那最終失效時間為:目前時間+3600秒+網域名稱URL鑒權有效時間長度。如果設定timestamp為:目前時間,那最終失效時間為:目前時間+網域名稱URL鑒權有效時間長度。
rand:隨機數,一般為0。
如要確保每次產生的URL不同,建議使用UUID格式,不能包含中劃線(-),如:
477b3bbc253f467b8def6711128c7****。uid:附加參數,暫未使用,一般為0。
md5hash:通過md5演算法計算出的驗證串。數字和小寫英文字母混合,固定長度32。
加密內容:
sstring = "URI-timestamp-rand-uid-PrivateKey" md5hash = md5sum(sstring)比如推流地址:
rtmp://push.aliyundoc.com/app/stream,加密內容為:/app/stream-timestamp-rand-uid-網域名稱鑒權Key。
使用方法
使用鑒權URL,需要推/播流網域名稱開啟URL鑒權功能(網域名稱初次添加時,預設已開啟URL鑒權,相關配置可參見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格式的播流地址將不能正常播放。
若您需要動態控制URL鑒權設定有效期間的話,可通過相關SDK,以動態傳入AppName和StreamName的方式進行控制,並參考相關連結鑒權程式碼範例。
auth_key建置原則選擇:播放地址的auth_key支援預產生和即時產生兩種方式。無嚴格安全要求且需要在有效期間內複用播放地址的情境,可提前產生auth_key,例如將timestamp設定為目前時間 + 7200 秒。需要降低 URL 泄露風險或按請求發放訪問授權的情境,建議每次請求播放地址時即時產生有效期間較短的auth_key,例如將timestamp設定為目前時間 + 300 秒。M3U8 格式的播流地址在播流開始及播流過程中會持續驗證鑒權時效,建議採用即時建置原則,避免鑒權在播流過程中到期。針對網路攝影機等無法遠程更新配置的固定IP推流裝置,若鑒權有效期間到期導致斷流,建議在安全性和可用性之間平衡設定有效期間,或改用推流IP白名單功能替代URL鑒權。
針對阿里雲即時音視頻ARTC協議,建議正式使用時務必開啟URL鑒權以防止資源被盜用產生額外費用;僅在臨時測試播放時可暫時關閉以確保地址可訪問。
推流網域名稱和播流網域名稱的鑒權主KEY可設定為相同值,推流地址和播流地址的鑒權及正常推流、播放均不受影響。鑒權主KEY長度建議不少於16位,控制台對不足8位的KEY會拒絕儲存並提示安全風險。
常見問題
未進行直播操作或已停止使用服務仍產生高額流量費用
原因分析
網域名稱未開啟 URL 鑒權或已關閉鑒權,導致推播流地址被惡意盜鏈。攻擊者可以通過拼接網域名稱、AppName 和 StreamName 直接拉流,消耗大量頻寬和流量。
解決與預防
立即開啟推流網域名稱和拉流網域名稱的 URL 鑒權功能,防止推播流地址被盜用。
不再使用的網域名稱需在ApsaraVideo for Live控制台停用並刪除,同時踢出線上流以阻斷消耗。
建議配置頻寬峰值監控及CloudMonitor警示(支援簡訊、郵件、DingTalk通知),及時發現異常流量。
未開啟 URL 鑒權時,代碼中 push_auth_key 和 pull_auth_key 參數如何配置?
若網域名稱未開啟訪問鑒權,推流和播流地址無需攜帶鑒權參數。代碼配置中將 push_auth_key 和 pull_auth_key 留空或不配置即可正常使用。
使用 PHP Demo 產生鑒權串時報錯 $matches[4] 缺失如何處理?
不能直接刪除 $args = $matches[4] 程式碼,因為後續邏輯依賴該變數判斷 URL 中查詢參數的拼接符號(? 或 &)。可保留指派陳述式,當 $matches[4] 不存在時將其賦值為空白字串,樣本如下:
$args = isset($matches[4]) ? $matches[4] : '';這樣可以確保鑒權串格式正確,同時避免 PHP 語法錯誤。
開啟或關閉URL鑒權後是否立即生效?是否需要重新推流?
開啟或關閉URL鑒權配置後立即生效,無需等待。
開啟鑒權後,若當前推流會話未中斷且AppName和StreamName保持不變,則不需要重新推流;僅新產生的推流地址和播流地址需要攜帶鑒權參數。
若開啟鑒權後影響業務,可隨時在控制台URL鑒權頁面關閉鑒權,關閉後直播服務立即恢複正常訪問。
開啟URL鑒權後返回403錯誤為何仍產生少量流量費用?
原因分析
非法請求雖被攔截並返回HTTP 403錯誤,但CDN邊緣節點仍需處理該請求並進行互動,因此會產生少量的請求數計費或邊緣節點互動流量費用。
解決與預防
建議推流網域名稱和播流網域名稱均開啟URL鑒權,從源頭最大程度減少異常請求產生的費用。