空间鉴权配置
更新时间:2022-01-05
空间鉴权配置默认对空间下所有设备同时生效,但如果设备有对应的配置项,则设备配置优先级将会高于空间配置。
推流鉴权
为保护监控设备推流地址不被非法占用,智能视联网平台提供推流鉴权功能,开启推流鉴权后,您可以通过加密后的地址进行推流。需要注意的是,空间的推流鉴权只对RTMP设备才起作用。
原理说明
原始url:rtmp://<domain>
/<app>
/<stream>
加密后url:rtmp://<domain>
/<app>
/<stream>
?timestamp=<timestamp>
&token=<token>
加密字段解释:
加密字段 | 描述 |
---|---|
<domain> |
空间配置的推流域名,如果没有配置则使用EVS默认提供的域名。 |
<app> |
RTMP设备的app参数,由用户自定义。 |
<stream> |
RTMP设备的stream参数,由用户自定义。 |
<timestamp> |
为url的生成时间,unix时间戳,格式为10进制。时间戳 + 有效时间(控制台配置,精确到秒)即为加密URL的过期时间。例如有效时间配置成60分钟,timestamp的值为1590725840,意味着推流url生成时间是2020/5/29 12:17:20,那么对应的加密URL将在2020/5/29 13:17:20之后失效。 |
<token> |
通过sha256_hex算法计算出来的验证串,数字0-9和小写英文字母a-z混合组成,固定长度64。值为sha256_hex(content,key),content=<domain> /<app> /<stream> ;<timestamp> , key=<key> 。其中<key> 是用户在EVS配置的密钥。 |
智能视联网服务器接收到请求后,会执行如下校验:
- 解析请求中timestamp,如果(timestamp + 有效时间)小于当前时间,则认为加密url过期,鉴权失败,无法推流。
- 构造content(content=
<domain>
/<app>
/<stream>
;<timestamp>
),然后使用sha256_hex算法算出一个验证穿,并与客户端请求中带来的token进行对比。如果一致则认为鉴权通过,否则鉴权失败,设备无法推流。
示例说明
- 原始url:rtmp://test.evs.com/app/stream
- 设置密钥:abcdefg
- 设置有效时间:60分钟
- 用户推流url中的timestamp为1590734594,即:2020/5/29 14:43:14
- 用户拼接出content:test.evs.com/app/stream;1590734594
- 根据content字符串计算token = sha256_hex("test.evs.com/app/stream;1590734594","abcdefg") = 82bbbc3d528ec91b1e1b3a78f09b2e11c03a13110c924c1e99a419f8f8534cb3。
- 生成加密url为:rtmp://test.evs.com/app/stream?timestamp=1590734594&token=82bbbc3d528ec91b1e1b3a78f09b2e11c03a13110c924c1e99a419f8f8534cb3
实时观看鉴权
为保护监控设备被盗链播放,智能视联网平台提供实时观看鉴权功能,开启实时观看鉴权后,您可以通过加密后的地址进行监控流的实时观看。
原理说明
实时观看提供三种播放协议,分别为RTMP/FLV/HLS。
原始url:
- RTMP:rtmp://
<domain>
/<app>
/<stream>
- FLV:
http
://<domain>
/<app>
/<stream>
.flv - HLS:
http
://<domain>
/<app>
/<stream>
.m3u8
加密后url:
- RTMP:rtmp://
<domain>
/<app>
/<stream>
?timestamp=<timestamp>
&token=<token>
- FLV:
http
://<domain>
/<app>
/<stream>
.flv?timestamp=<timestamp>
&token=<token>
- HLS:
http
://<domain>
/<app>
/<stream>
.m3u8?timestamp=<timestamp>
&token=<token>
加密字段解释:
加密字段 | 描述 |
---|---|
<domain> |
空间配置的推流域名,如果没有配置则使用EVS默认提供的域名。 |
<app> |
RTMP设备的app参数,由用户自定义。 |
<stream> |
RTMP设备的stream参数,由用户自定义。 |
<timestamp> |
为url的生成时间,unix时间戳,格式为10进制。时间戳 + 有效时间(控制台配置,精确到秒)即为加密URL的过期时间。例如有效时间配置成60分钟,timestamp的值为1590725840,意味着推流url生成时间是2020/5/29 12:17:20,那么对应的加密URL将在2020/5/29 13:17:20之后失效。 |
<token> |
通过sha256_hex算法计算出来的验证串,数字0-9和小写英文字母a-z混合组成,固定长度64。值为sha256_hex(content,key),content=<domain> /<app> /<stream> ;<timestamp> , key=<key> 。其中<key> 是用户在EVS配置的密钥。 |
EVS服务器接收到请求后,会执行如下校验:
- 解析请求中timestamp,如果(timestamp + 有效时间)小于当前时间,则认为加密url过期,鉴权失败,无法播放。
- 构造content(content=
<domain>
/<app>
/<stream>
;<timestamp>
),然后使用sha256_hex算法算出一个验证穿,并与客户端请求中带来的token进行对比。如果一致则认为鉴权通过,否则鉴权失败,设备无法进行实时观看。
示例说明
以rtmp播放协议为例:
- 原始url:rtmp://test.evs.com/app/stream
- 设置密钥:abcdefg
- 设置有效时间:60分钟
- 用户推流url中的timestamp为1590734594,即:2020/5/29 14:43:14
- 用户拼接出content:test.evs.com/app/stream;1590734594
- 根据content字符串计算token = sha256_hex("test.evs.com/app/stream;1590734594","abcdefg") = 82bbbc3d528ec91b1e1b3a78f09b2e11c03a13110c924c1e99a419f8f8534cb3。
- 生成加密url为:rtmp://test.evs.com/app/stream?timestamp=1590734594&token=82bbbc3d528ec91b1e1b3a78f09b2e11c03a13110c924c1e99a419f8f8534cb3