URL鉴权功能主要用于保护用户站点资源不被非法站点下载盗用。阿里云CDN为您提供了三种鉴权方式,本文为您详细介绍鉴权方式B的原理和示例说明。

原理说明

  • 鉴权方式B加密URL构成
    http://DomainName/timestamp/md5hash/FileName
    鉴权字段说明
    字段 描述
    DomainName CDN站点的域名。
    timestamp 签算服务器生成鉴权URL的时间,与鉴权URL有效时长共同控制鉴权URL的失效时间。时间点取自签算服务器的“UTC+8”时间,格式为:YYYYMMDDHHMM。
    说明 多数情况下,鉴权URL的有效时长为CDN配置的鉴权URL有效时长。有时在签算增加鉴权URL的有效时长的,此时,timestamp=签算服务器上的Unix时间戳+签算服务器上加的有效时长;鉴权URL实际有效时长=timestamp+CDN配置的鉴权URL有效时长。
    md5hash 通过md5算法计算出的验证串,由数字0-9和小写英文字母a-z混合组成,固定长度32。
    Filename 实际回源访问的URL,鉴权时Filename需以/开头。
  • 鉴权逻辑说明
    CDN服务器接到资源访问请求后,判断最终生成鉴权URL请求中的timestamp+鉴权URL有效时长是否小于当前时间。
    • 如果timestamp+鉴权URL有效时长小于当前时间,服务器判定过期失效,并返回HTTP 403错误。
    • 如果timestamp+鉴权URL有效时长大于当前时间,则以sstring方式构造出一个字符串,然后使用MD5算法算出md5hash的值,再将计算出的md5hash值与用户访问请求中携带的md5hash的值进行比对。
      • 结果一致,鉴权通过,返回资源请求。
        说明 当鉴权通过时,会去掉URL中与鉴权相关的那部分参数,可以提高缓存命中率,减少回源流量:
        • 实际生成缓存key的URL格式:http://DomainName/FileName
        • 实际回源的URL格式:http://DomainName/FileName
      • 结果不一致,鉴权失败,返回HTTP 403错误。

鉴权URL示例

通过以下示例说明,您可以准确理解鉴权方式B的实现方式。
  • 示例条件
    • 回源请求对象。
      http://cdn.example.com/4/44/44c0909bcfc20a01afaf256ca99a8b8b.mp3
      说明 如果您的回源请求对象中有中文汉字,请先对其进行URL转码(即Encode),再进行鉴权URL的拼接。
    • 设置密钥为:aliyuncdnexp1234。
    • 签算服务器生成鉴权URL的时间: 201508150800。
  • 拼接流程
    1. CDN服务器构造一个用于计算md5hash的签名字符串。
      aliyuncdnexp1234201508150800/4/44/44c0909bcfc20a01afaf256ca99a8b8b.mp3
    2. 根据该签名字符串,CDN服务器会计算出md5hash
      md5hash = md5sum("aliyuncdnexp1234201508150800/4/44/44c0909bcfc20a01afaf256ca99a8b8b.mp3") = 9044548ef1527deadafa49a890a377f0
    3. 生成鉴权URL。
      http://cdn.example.com/201508150800/9044548ef1527deadafa49a890a377f0/4/44/44c0909bcfc20a01afaf256ca99a8b8b.mp3

当使用客户端提供的加密URL进行访问时,如果CDN服务器计算出来的md5hash值与访问请求中带的md5hash值相同,都为9044548ef1527deadafa49a890a377f0,则鉴权通过;反之鉴权失败。