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
下治理:
pub
和sub
结尾的字段决定了各协定是否开启鉴权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 签名的鉴权参数
首先,仍然是批改配置文件(参见下面形式一中的形容):
pub
和sub
等结尾的字段决定了各协定是否开启鉴权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 接口将该申请踢掉。
相干文档:
- lalserver HTTP Notify 事件回调
- lalserver HTTP API 接口
第三方文档
- https://help.aliyun.com/docum…
- https://cloud.tencent.com/doc…
- https://www.wangsu.com/docume…