通过控制台配置URL鉴权,可以保护用户上传到视频点播的内容不被非法站点下载盗用。本文为您简要介绍了URL鉴权的原理和鉴权A方法。

背景

一般情况下,通过配置访问Referer黑名单和白名单来实现对访客身份的识别和过滤,保护站点资源,可以解决部分盗链问题。但由于Referer内容可以伪造,采用URL鉴权方式更为安全有效,视频点播仅支持使用鉴权A的方式进行鉴权加密。

实现原理

URL鉴权功能通过阿里云CDN加速节点与客户资源站点配合,形成了更为安全可靠的源站资源防盗方法。

  1. 由使用视频点播鉴权URL的客户为其用户提供加密URL(包含权限验证信息,URL组成请参见鉴权A方法说明)。
  2. 用户使用加密后的URL向加速节点发起请求。
  3. 加速节点对加密URL中的权限信息进行验证以判断请求的合法性,对合法请求给予正常响应,并拒绝非法请求,从而有效保护CDN客户站点资源。鉴权判断逻辑,请参见鉴权逻辑说明

鉴权A方法说明

  • 鉴权URL构成

    鉴权URL由播放文件地址加上验证串(auth_key)构成。验证串是根据鉴权Key+过期时间通过MD5算法计算得出,且具有时效性。示例如下:

    http://DomainName/Filename?auth_key=timestamp-rand-uid-md5hash
    鉴权字段描述如下表所示。
    字段 描述
    DomainName 视频点播的域名。
    Filename 实际回源访问的URL,鉴权时Filename需以正斜线(/)开头。
    timestamp 服务器端返回数据的时间,即应用服务端生成URL链接的时间。Unix时间戳,时间点取的是服务器端的时间(UTC时间),需要转换为十进制整型正数,固定长度为10,用来控制鉴权URL的失效时间。鉴权URL的失效时间=timestamp+用户设置的有效时间。有效时间由用户在视频点播控制台上的域名管理 > 访问控制 > URL鉴权 > 生成鉴权URL > 有效时间设置,如果设置为1800秒,您访问的时间超过timestamp+1800秒后,该鉴权URL失效,会返回HTTP 403。
    • 若通过在视频点播控制台的域名管理 > 访问控制 > URL鉴权 > 修改配置 > 默认有效时长生成:timestamp=生成链接的时间+默认有效时长。
    • 若使用代码拼接:您可以自己定义timestamp。

    例如,鉴权URL的最终的生效时间为2022年07月07日00:30:00,计算出的时间戳:2022年07月07日00:30:00-设定的有效时间1800秒=2022年07月07日00:00:00=1657125000。

    rand 随机数,一般取值为0。如果要确保每次生成的URL不同,建议使用UUID,不能包含中划线(-),例如:477b3bbc253f467b8def6711128c****。
    uid 用户ID,暂未使用(设置成0即可)。
    md5hash 通过MD5算法计算出的验证串。数字和小写英文字母混合0-9、a-z,固定长度32。
    sstring = "URI-timestamp-rand-uid-PrivateKey"
    md5hash = md5sum(sstring)
    • URI:请求文件的相对地址,不包含参数,如:/Filename。
    • PrivateKey:控制台配置的主Key或备Key,二者皆可。

      主KEY和备KEY拥有同样的效力,备Key主要用于平滑更换。若主KEY执行更换,所有使用主KEY生成的播放地址会立即失效。备KEY作为主KEY更换时,使用主KEY的播放地址不会马上中断,备KEY可以继续替代主KEY提供服务。

    • md5sum:表示计算MD5值,请使用开发语言对应的函数。
  • 鉴权逻辑说明

    视频点播服务器接到资源访问请求后,判断最终生成鉴权URL请求中的timestamp加上控制台URL鉴权中配置的默认有效时长是否小于当前时间。

    • 如果timestamp加上默认有效时长小于当前时间,服务器判定过期失效,并返回HTTP 403错误。
    • 如果timestamp加上默认有效时长大于当前时间,构造出一个同样的字符串,然后使用MD5算法算出HashValue的值,再与请求中md5hash的值进行比对。
      • 结果一致,鉴权通过,返回资源请求。
      • 结果不一致,鉴权失败,返回HTTP 403错误。

使用方法

您需要在控制台的URL鉴权页面配置并开启URL鉴权,具体操作,请参见URL鉴权

鉴权URL的获取方式
  • 开启URL鉴权后,如果您的资源都在视频点播控制台中,控制台会自动生成带时效的鉴权URL,您也可以通过调用获取视频播放地址接口获取鉴权URL。
    说明 开启URL鉴权后,视频、音频、封面、截图等地址都会进行鉴权。
  • 开启URL鉴权后,如果您的资源不在视频点播控制台中,您可以使用鉴权A方法进行鉴权URL的拼接,生成动态的鉴权URL。更多信息,请参见鉴权A方法说明鉴权URL拼接示例说明

鉴权URL拼接示例说明

示例条件
  • 回源请求对象。
    http://example.aliyundoc.com/video/standard/test-****.mp4
    注意 如果您的回源请求对象中有中文汉字,请先对其进行URL转码(即encode),再进行鉴权URL的拼接。
  • 设置密钥为:aliyunvodexp****。
  • URL设置的有效时间为2021-08-01 00:00:00,则timestamp为1627747200。
拼接流程
  1. 构造签名字符串。

    构造一个用于计算Hashvalue的签名字符串。

    /video/standard/test-****.mp4-1627747200-0-0-aliyunvodexp****
  2. 计算MD5值。

    根据该签名字符串计算出Hashvalue

    HashValue = md5sum("/video/standard/test-****.mp4-1627747200-0-0-aliyunvodexp****") = 0e9048c8c7de46b6015618f42de7****
  3. 生成鉴权URL。
    http://example.aliyundoc.com/video/standard/test-****.mp4?auth_key=1627747200-0-0-0e9048c8c7de46b6015618f42de7****

当用户使用鉴权URL进行访问时,如果视频点播服务器计算出来的HashValue值与访问请求中带的md5hash值相同,都为0e9048c8c7de46b6015618f42de7****,则鉴权通过,反之鉴权失败。