CDN 如何实现鉴权配置?-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

CDN 如何实现鉴权配置?

青衫无名 2017-10-23 15:45:46 7905


URL鉴权功能



概述


URL鉴权功能旨在保护用户站点的内容资源不被非法站点下载盗用。采用防盗链方法添加 referer 黑、白名单方式可以解决部分盗链问题,但是,由于 referer 内容可以伪造,referer 防盗链方式还不能很好的保护站点资源,因此采用URL鉴权方式保护用户源站资源更为安全有效。

原理


URL鉴权功能是通过阿里云CDN加速节点与客户资源站点配合实现的一种更为安全可靠的源站资源防盗方法。由CDN客户站点提供给用户加密 URL(包含权限验证信息),用户使用加密后的 URL 向加速节点发起请求,加速节点对加密 URL 中的权限信息进行验证以判断请求的合法性,对合法请求给予正常响应,拒绝非法请求,从而有效保护CDN客户站点资源。

URL鉴权方式


阿里云CDN 兼容并支持A、B、C三种鉴权方式,用户可以根据自己的业务情况,选择合适的鉴权方式,来实现对源站资源的有效保护

A鉴权方法



原理说明



用户访问加密 URL 构成http://DomainName/Filename?auth_key=timestamp-rand-uid-md5hash




鉴权字段描述

  • PrivateKey 字段用户可以自行设置
  • 有效时间1800s是指,用户访问客户源服务器时间超过自定义失效时间(timestamp字段指定)的1800s后,该鉴权失效;例如用户设置访问时间2020-08-15 15:00:00,链接真正失效时间是2020-08-15 15:30:00
[tr=rgb(255, 255, 255)]字段描述[tr=rgb(255, 255, 255)]timestamp失效时间,整形正数,固定长度10,1970年1月1日以来的秒数。用来控制失效时间,10位整数,有效时间1800s[tr=rgb(255, 255, 255)]rand随机数,一般设成0[tr=rgb(255, 255, 255)]uid暂未使用(设置成0即可)[tr=rgb(255, 255, 255)]md5hash通过md5算法计算出的验证串,数字和小写英文字母混合0-9a-z,固定长度32
CDN服务器拿到请求后,首先会判断请求中的 timestamp 是否小于当前时间,如果小于,则认为过期失效并返回HTTP 403错误。如果 timestamp 大于当前时间,则构造出一个同样的字符串(参考以下sstring构造方式)。然后使用MD5算法算出 HashValue ,再和请求中带来的 md5hash 进行比对。比对结果一致,则认为鉴权通过,返回文件。否则鉴权失败,返回HTTP 403错误。
  • HashValue 是通过以下字符串计算出来的:sstring = "URI-Timestamp-rand-uid-PrivateKey" (URI是用户的请求对象相对地址,不包含参数,如 /Filename)
  • HashValue = md5sum(sstring)



示例说明


  1. 通过 req_auth 请求对象:http:// cdn.example.com/video/standard/1K.html


密钥设为:aliyuncdnexp1234 (由用户自行设置)鉴权配置文件失效日期为:2015年10月10日00:00:00,计算出来的秒数为1444435200
则CDN服务器会构造一个用于计算Hashvalue的签名字符串: /video/standard/1K.html-1444435200-0-0-aliyuncdnexp1234"

CDN服务器会根据该签名字符串计算HashValue: HashValue = md5sum("/video/standard/1K.html-1444435200-0-0-aliyuncdnexp1234") = 80cd3862d699b7118eed99103f2a3a4f

则请求时url为: http://cdn.example.com/video/standard/1K.html?auth_key=1444435200-0-0-80cd3862d699b7118eed99103f2a3a4f

计算出来的HashValue与用户请求中带的 md5hash = 80cd3862d699b7118eed99103f2a3a4f 值一致,于是鉴权通过

B鉴权方式



原理说明



用户访问加密 URL 格式

  • 用户访问的 URL 如下:http://DomainName/timestamp/md5hash/FileName


加密URL的构造:域名后跟生成URL的时间(精确到分钟)(timestamp)再跟md5值(md5hash),最后拼接回源服务器的真实路径(FileName),URL有效时间为1800s
  • 当鉴权通过时,实际回源的URL是:
  1. [backcolor=transparent]http[backcolor=transparent]:[backcolor=transparent]//DomainName/FileName


鉴权字段描述

  • 注意:PrivateKey 由CDN客户自行设置
  • 有效时间1800s是指,用户访问客户源服务器时间超过自定义失效时间(timestamp字段指定)的1800s后,该鉴权失效;例如用户设置访问时间2020-08-15 15:00:00,链接真正失效时间是2020-08-15 15:30:00
[tr=rgb(255, 255, 255)]字段描述[tr=rgb(255, 255, 255)]DomainNameCDN客户站点的域名[tr=rgb(255, 255, 255)]timestamp资源失效时间,作为URL的一部分,同时作为计算 md5hash 的一个因子,格式为: YYYYMMDDHHMM ,有效时间1800s[tr=rgb(255, 255, 255)]md5hash以timestamp、FileName和预先设定好的 PrivateKey 共同做MD5获得的字符串,即 md5(PrivateKey + timestamp + FileName)[tr=rgb(255, 255, 255)]FileName实际回源访问的URL (注意,鉴权时候FileName要以/开头)

示例说明


  1. 回源请求对象:http://cdn.example.com/4/44/44c0909bcfc20a01afaf256ca99a8b8b.mp3


密钥设为:aliyuncdnexp1234 (用户自行设置)用户访问客户源服务器时间为 201508150800(格式为: YYYYMMDDHHMM)
则CDN服务器会构造一个用于计算 md5hash 的签名字符串: aliyuncdnexp1234201508150800/4/44/44c0909bcfc20a01afaf256ca99a8b8b.mp3

服务器会根据该签名字符串计算 md5hash : md5hash = md5sum("aliyuncdnexp1234201508150800/4/44/44c0909bcfc20a01afaf256ca99a8b8b.mp3") = 9044548ef1527deadafa49a890a377f0

请求CDN时url: http://cdn.example.com/201508150800/9044548ef1527deadafa49a890a377f0/4/44/44c0909bcfc20a01afaf256ca99a8b8b.mp3

计算出来的 md5hash 与用户请求中带的 md5hash = 9044548ef1527deadafa49a890a377f0 值一致,于是鉴权通过

C鉴权方式



原理说明



用户访问加密 URL 格式


格式1
http://DomainName/{<md5hash>/<timestamp>}/FileName
格式2http://DomainName/FileName{&KEY1=<md5hash>&KEY2=<timestamp>}
  • 花括号中的内容表示在标准的URL基础上添加的加密信息
  • <md5hash> 是验证信息经过 MD5 加密后的字符串;
  • <timestamp> 是未加密的字符串,以明文表示。固定长度10,1970年1月1日以来的秒数,表示为十六进制
  • 采用格式一进行URL加密,例如http://cdn.example.com/a37fa50a5fb8f71214b1e7c95ec7a1bd/55CE8100/test.flv


<md5hash> 为 a37fa50a5fb8f71214b1e7c95ec7a1bd<timestamp> 为 55CE8100

鉴权字段描述

  • <md5hash> 部分字段描述
[tr=rgb(255, 255, 255)]字段描述[tr=rgb(255, 255, 255)]PrivateKey干扰串,不同客户采用不同的干扰串[tr=rgb(255, 255, 255)]FileName实际回源访问的URL (注意,鉴权时候path要以/开头)[tr=rgb(255, 255, 255)]time用户访问源服务器时间,取 UNIX 时间,以十六进制数字字符表示。
  • PrivateKey 取值 aliyuncdnexp1234
  • FileName 取值 /test.flv
  • time 取值 55CE8100

  • 因此 md5hash 值为md5hash = md5sum(aliyuncdnexp1234/test.flv55CE8100) = a37fa50a5fb8f71214b1e7c95ec7a1bd


  • 明文: timestamp = 55CE8100
  • 这样生成加密 URL:

格式一: http://cdn.example.com/a37fa50a5fb8f71214b1e7c95ec7a1bd/55CE8100/test.flv

格式二: http://cdn.example.com/test.flv?KEY1=a37fa50a5fb8f71214b1e7c95ec7a1bd&KEY2=55CE8100


示例说明


用户使用加密的 URL 访问加速节点,CDN服务器会先把加密串 1 提取出来, 并得到原始的 URL 的 <FileName> 部分,用户访问时间,然后按照定义的业务逻辑进行验证:
  1. 使用原始的 URL 中的 <FileName> 部分,请求时间及 PrivateKey 进行 MD5 加密得到一个加密串2
  2. 比较加密串 2 与加密串 1 是否一致,如果不一致则拒绝
  3. 取加速节点服务器当前时间,并与从访问 URL 中所带的明文时间相减,判断是否超过设置的时限 t(时间域值 t 默认为 1800s)
  4. 有效时间1800s是指,用户访问客户源服务器时间超过自定义时间的1800s后,该鉴权失效;例如用户设置访问时间2020-08-15 15:00:00,链接真正失效时间是2020-08-15 15:30:00
  5. 时间差小于设置时限的为合法请求,CDN加速节点才会给予正常的响应,否则拒绝该请求,返回 http 403错误


URL鉴权代码示例


请查看CDN周边工具中 鉴权代码示例 文档

配置引导


CDN域名概览页—>进入域名管理页面—>选择需要设置的域名—>点击配置
[backcolor=transparent] [backcolor=transparent] [backcolor=transparent] [backcolor=transparent]


本文导读目录
算法 安全 Unix 数据安全/隐私保护 CDN
分享到
取消 提交回答
全部回答(0)
+ 订阅

云安全开发者的大本营

推荐文章
相似问题