開源服務lalserver支援多種鑑權防盜鏈方式

就想叫yoko發表於2022-03-23

lalserver是純Golang開發的流媒體伺服器。目前已支援RTMP, RTSP(RTP/RTCP), HLS, HTTP[S]/WebSocket[S]-FLV/TS協議。

目前已支援多種鑑權防盜鏈的方式。

lal github地址https://github.com/q191201771...

▌ 方式一. 固定值的鑑權引數

首先,修改配置檔案,如下:

"conf_version": "v0.2.6",
...
"simple_auth": {
    "key": "q191201771",              // 私有key,計算鑑權引數時使用
    "dangerous_lal_secret": "pengrl", // 後門鑑權引數,所有的流可通過該引數值鑑權
    "pub_rtmp_enable": true,          // rtmp推流是否開啟鑑權,true為開啟鑑權,false為不開啟鑑權
    "sub_rtmp_enable": true,          // rtmp拉流是否開啟鑑權
    "sub_httpflv_enable": true,       // httpflv拉流是否開啟鑑權
    "sub_httpts_enable": true,        // httpts拉流是否開啟鑑權
    "pub_rtsp_enable": true,          // rtsp推流是否開啟鑑權
    "sub_rtsp_enable": true,          // rtsp拉流是否開啟鑑權
    "hls_m3u8_enable": true           // m3u8拉流是否開啟鑑權
}
...

方式一和方式二的配置都在配置項simple_auth下管理:

  • pubsub開頭的欄位決定了各協議是否開啟鑑權
  • dangerous_lal_secret為鑑權引數的值
  • key在下面方式二中使用,這裡暫時不關心

舉例,沒開啟鑑權功能時,推rtmp流的url是rtmp://127.0.0.1:8080/live/test110

開啟後,業務方推流url是變為

rtmp://127.0.0.1:8080/live/test110?lal_secret=pengrl

其中lal_secret就是鑑權簽名引數,名字是固定的,值也是固定的,對應配置檔案中dangerous_lal_secret的值。

該鑑權方式,所有流都使用同一個鑑權引數值。

▌ 方式二. MD5簽名的鑑權引數

首先,依然是修改配置檔案(參見上面方式一中的描述):

  • pubsub等開頭的欄位決定了各協議是否開啟鑑權
  • key用來做MD5簽名

舉例,沒開啟鑑權功能時,推rtmp流的url是rtmp://127.0.0.1:8080/live/test110

開啟後,業務方推流url是變為

rtmp://127.0.0.1:8080/live/test110?lal_secret=700997e1595a06c9ffa60ebef79105b0

其中lal_secret就是鑑權簽名引數,名字是固定的,值的計算公式是

md5(配置檔案中的simple_auth::key + 流名稱)

上面的例子對應的計算方式是

md5("q191201771test110")

Go、c++程式碼以及命令列、網頁工具如何計算MD5見:使用工具或程式碼生成MD5 - 仁亮筆記

該鑑權模式下,不同的流名稱對應不同的鑑權引數。

注意,方式一和方式二可同時使用。lal_secret的值滿足任意一種計算方式即可鑑權通過。

▌ 方式三. 與業務方服務互動,自由定製鑑權方式

大體的邏輯是,lalserver在接收到推流或者拉流請求時,使用http回撥的方式通知業務方的服務。

業務方的服務根據自身的邏輯,判定這個推流或者拉流請求是否合法。

如果不合法,使用lalserver提供的http api介面將該請求踢掉。

相關文件:

第三方文件

相關文章