鉴权方式 V
功能简介
为了强化视频场景的权限控制能力,EO 推出了 TypeV 鉴权的解决方案。该方案具备的能力如下:
支持在 URL 中指定过期时间,他人获取后无法长期使用;
支持在 URL 中将客户端 IP 纳入签名计算,他人获取后无法访问;
支持在 URL 中指定试看时长,实现试看功能;
支持在 URL 中指定 Referer 黑白名单;
支持在 URL 中指定从某个 unix 时间戳开始播放视频,实现伪直播功能;
开发者使用密钥
KEY
对 URL 签名,并在 URL 中带上签名结果。只要用户密钥不泄露,其他用户无法伪造加密 URL;EdgeOne 节点检查加密 URL 中的参数和签名,对访问请求进行控制。如果请求检查不通过,则返回 403 响应码。
鉴权参数
如下为鉴权 URL 中各个参数的含义和取值方法。
参数名 | 必选 | 说明 |
KEY | 是 | 开启 TypeV 鉴权时填写的密钥。由大小写字母(a -Z)、数字(0-9)以及特殊字符组成,长度在8-20个字符之间。支持在控制台中随机生成。 |
Path | 是 | 原始 URL 的 PATH 部分。如果原始 URL 为 http://example.vod2.myqcloud.com/dir1/dir2/myVideo.mp4,则 Path 为 /dir1/dir2/myVideo.mp4。 |
t | 是 | 访问 URL 的过期时间戳,单位为秒,以 Unix 时间的十六进制小写形式表示。 过期后该 URL 将不再有效,返回 403 响应码。考虑到机器之间可能存在时间差,鉴权 URL 的实际过期时间一般比指定的过期时间长 5 分钟,即额外给出 300 秒的容差时间。 建议过期时间戳不要过短,确保在有效时间内用户可完成下载或视频播放。 |
exper | 否 | 试看时长,单位为秒,以十进制表示,不填或者填 0 表示不试看(即返回完整视频)。 试看时长不要超过视频原始时长,否则可能导致播放失败。 |
us | 否 | 链接标识,用于随机化一个鉴权 URL,增强链接的唯一性。 建议每次生成鉴权 URL 时,指定一个随机的 us 值。 |
plive | 否 | 单位为秒,以 Unix 时间的十六进制小写形式表示。用于实现伪直播功能,实现从指定的时间开始播放视频。 示例:若 plive 的值为 669f9b40,则代表对应加密请求的资源需要在 2024-07-23 20:00:00 后才允许访问。 |
whref | 否 | 允许访问的域名来源列表,支持 1 条 - 10 条,用半角逗号分隔。域名前不要带协议名(http://和 https://),域名为完整匹配(如填写 abc.com,则仅能匹配到 abc.com,无法匹配到 abc.com.cn),且支持通配符(如 *.abc.com)。 |
bkref | 否 | 禁止访问的域名来源列表,支持 1 条 - 10 条,用半角逗号分隔。域名前不要带协议名(http://和 https://),域名为完整匹配(如填写 abc.com,则仅能匹配到 abc.com,无法匹配到 abc.com.cn),且支持通配符(如 *.abc.com)。 |
whip | 否 | 允许访问的客户端 IP 列表,支持 1 个 - 10 个,多个用半角逗号分隔。客户端 IP 支持 IP 以及 IP 段,如 192.168.0.0 或 192.168.0.0/24。其中,0.0.0.0/0 代表所有 ipv4,::/0 代表所有 ipv6。 |
bkip | 否 | 禁止访问的客户端 IP 列表,支持 1 个 - 10 个,多个用半角逗号分隔。客户端 IP 支持 IP 以及 IP 段,如 192.168.0.0 或 192.168.0.0/24。其中,0.0.0.0/0 代表所有 ipv4,::/0 代表所有 ipv6。 |
sign | 是 |
说明:
签名计算公式
sign = sha1(KEY + Path + t + plive + exper + us + whref + bkref + whip + bkip)
公式中的
+
代表字符串拼接,选填参数可以为空字符串。防盗链 URL 生成规则
在原始 URL 尾部,以 QueryString 的方式加入防盗链参数,形如:
http://example.vod2.myqcloud.com/dir1/dir2/myVideo.mp4?t=[t]&exper=[exper]&us=[us]&whref=[whref]&whip=[whip]&sign=[sign]
注意:
公式中的
+
代表字符串拼接,选填参数可以为空字符串;进行签名计算时,各参数必须严格按照签名计算公式的顺序,如果顺序不正确则会生成错误的签名。
配置示例
假设原始 URL 是
http://example.vod2.myqcloud.com/dir1/dir2/myVideo.mp4
。该开发者配置了 TypeV 鉴权,生成的密钥是24FEQmTzro4V5u3D5epW
,生成的随机字符串为 72d4cd1101
,下面分别对“视频播放地址有效时间控制”、“同一鉴权 URL 仅允许一个客户端 IP 播放”和“视频允许播放客户端 IP”的场景,介绍如何生成鉴权 URL。
示例1:播放地址有效时间控制
若您需要为这个视频生成鉴权 URL,URL 的过期时间是 2018 年 01 月 31 日 20:00(Unix 时间为 1517400000),请参照如下步骤。
步骤1:确定鉴权参数
参数名 | 取值 | 说明 |
KEY | 24FEQmTzro4V5u3D5epW | 开发者开通 Key 防盗链时选择的密钥 |
Dir | /dir1/dir2/myVideo.mp4 | 原始 URL 的 Path 部分 |
t | 5a71afc0 | 过期时间戳 1517400000 的十六进制表示结果 |
us | 72d4cd1101 | 生成的随机字符串 |
步骤2:计算签名
sign = sha1("24FEQmTzro4V5u3D5epW/dir1/dir2/myVideo.mp45a71afc072d4cd1101") = "3ff5ab708b018fce5c3023b6d27ca938d7ab75e3"
步骤3:生成鉴权 URL
将鉴权参数拼接到视频原始 URL 的 QueryString 中,得到视频鉴权 URL:
http://example.vod2.myqcloud.com/dir1/dir2/myVideo.mp4?t=5a71afc0&us=72d4cd1101&sign=3ff5ab708b018fce5c3023b6d27ca938d7ab75e3
示例2:同一鉴权 URL 仅允许一个客户端 IP 访问
若您需要限制同一鉴权 URL 仅允许一个客户端 IP 访问,请参照如下步骤。
步骤1:确定鉴权参数
参数名 | 取值 | 说明 |
KEY | 24FEQmTzro4V5u3D5epW | 开发者开通 Key 防盗链时选择的密钥 |
Path | /dir1/dir2/myVideo.mp4 | 原始 URL 的 Path 部分 |
t | 5a71afc0 | 过期时间戳 1517400000 的十六进制表示结果 |
us | 72d4cd1101 | 生成的随机字符串 |
whip | 192.168.0.0 | 允许访问的客户端 IP |
步骤2:计算签名
sign = sha1("24FEQmTzro4V5u3D5epW/dir1/dir2/5a71afc072d4cd1101192.168.0.0") = "c8cd894ef4ee0387c99ac488f46bbe8205bc63af"
步骤3:生成鉴权 URL
将鉴权参数拼接到视频原始 URL 的 QueryString 中,得到视频鉴权 URL:
http://example.vod2.myqcloud.com/dir1/dir2/myVideo.mp4?t=5a71afc0&us=72d4cd1101&whip=192.168.0.0&sign=c8cd894ef4ee0387c99ac488f46bbe8205bc63af
示例3:允许播放时长控制
若您需要生成一个试看 URL,试看时长为视频的前 5 分钟(视频原始时长大于 5 分钟),请参照如下步骤。
步骤1:确定鉴权参数
参数名 | 取值 | 说明 |
KEY | 24FEQmTzro4V5u3D5epW | 开发者开通 Key 防盗链时选择的密钥 |
Path | /dir1/dir2/myVideo.mp4 | 原始 URL 的 Path 部分 |
t | 5a71afc0 | 过期时间戳 1517400000 的十六进制表示结果 |
exper | 300 | 试看前 5 分钟,即 300 秒 |
us | 72d4cd1101 | 生成的随机字符串 |
步骤2:计算签名
sign = sha1("24FEQmTzro4V5u3D5epW/dir1/dir2/myVideo.mp45a71afc030072d4cd1101") = "3a50217aff3e39fbf795b8db40925bc61735fe83"
步骤3:生成鉴权 URL
将鉴权参数拼接到视频原始 URL 的 QueryString 中,得到视频鉴权 URL:
http://example.vod2.myqcloud.com/dir1/dir2/myVideo.mp4?t=5a71afc0&exper=300&us=72d4cd1101&sign=3a50217aff3e39fbf795b8db40925bc61735fe83