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

背景

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

实现原理

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

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

鉴权A方法说明

  • 鉴权URL构成

    鉴权URL由播放文件地址加上验证串(auth_key)构成。示例如下:

    http://DomainName/Filename?auth_key=timestamp-rand-uid-md5hash
    验证串是根据鉴权Key+过期时间通过MD5算法计算得出,且具有时效性。鉴权字段描述如下表所示。
    字段 描述
    DomainName 视频点播的域名。
    Filename 实际回源访问的URL,鉴权时Filename需以正斜线(/)开头。
    timestamp URL失效时间,为Unix时间戳,整型正数,固定长度10。值为1970年1月1日以来的当前时间秒数+过期时间秒数(用UTC时间表示),用来控制失效时间,过期时间由客户端设置。若设置为1800s,当访问时间超过1800s后,该鉴权失效。当URL鉴权失效,会返回HTTP 403。
    • 若使用控制台的访问控制 > URL鉴权生成:timestamp=生成链接的时间+默认有效时长。
    • 若使用代码拼接:您可以自己定义timestamp。

    例如,最终的有效时间为2022年07月07日00:30:00,计算出的时间戳:1657125000。

    rand 随机数,一般取值为0。如果要确保每次生成的URL不同,建议使用UUID,不能包含中划线(-),例如:477b3bbc253f467b8def6711128c7bec。
    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方法说明#example_lfp_mmy_sao

鉴权URL拼接示例说明

示例条件

  • 回源请求对象。
    http://vod.example.com/video/standard/test.mp4
    注意 如果您的回源请求对象中有中文汉字,请先对其进行URL转码(即encode),再进行鉴权URL的拼接。
  • 设置密钥为:aliyunvodexp1234。
  • URL设置的有效时间为2021-08-01 00:00:00,则timestamp为1627747200。

拼接流程

  1. 构造签名字符串。

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

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

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

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

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