主要还是使用又拍的CDN实现一下腾讯云的鉴权功能
TYPEB:
访问 URL 格式
http://DomainName/timestamp/md5hash/FileName
算法说明
timestamp:格式为 YYYYMMDDHHMM。
md5hash:MD5(自定义密钥 + timestamp + 文件路径)。
又拍云边缘规则实现:
一、判断格式是否正确
URI 字符串提取:
^.*?/([0-9]+)/([0-9a-zA-Z]+)/(.*?)$
规则编辑器:
$WHEN($OR($NOT($1),$NOT($2),$NOT($3)))$EXIT(403)
# 解释:
# 当 $1或$2或$3不存在时返回403状态码
二、判断时间戳(这里以600s 即10分钟有效为例)
URI 字符串提取:
^.*?/([0-9]+)/([0-9a-zA-Z]+)/(.*?)$
规则编辑器:
$WHEN($GE($MSUB($STRF_TIME($_TIME),10),$1)$EXIT(403)
# 解释:
# 当 $1(YYYYMMDDHHMM格式时间)-10(即10分钟) 大于$1(请求中的时间) 则返回403状态码
解释:
$GE(E1, E2) #数字比较,是否大于等于,返回 true 或者 false
$MSUB(E1, E2) #数字相减,返回 E1 - E2 结果数值
$STRF_TIME(E1) #时间戳转换(Unix 时间戳转为YYYYMMDDHHMM格式)
三、判断MD5
URI 字符串提取:
^.*?/([0-9]+)/([0-9a-zA-Z]+)/(.*?)$
规则编辑器:
$WHEN($NOT($EQ($MD5('将这段文字替换为key'$1'/'$3),$LOWER($2)))))$EXIT(403)
解释:
$EQ(E1, E2) #字符串是否相等,返回 true 或者 false
$MD5(E) #计算 E 的 md5 值
$1 #字符串中提取的第一个子匹配 在这里为时间戳
$2 #字符串中提取的第二个子匹配 在这里为待校验的MD5
$3 #字符串中提取的第三个子匹配 在这里为不包含斜杠的路径
$LOWER(E) #将 E 转换为小写
四、URL改写
URI 字符串提取(可选)
^.*?/([0-9]+)/([0-9a-zA-Z]+)/(.*?)$
改写规则
/$3
TYPEC:
访问 URL 格式
http://DomainName/md5hash/timestamp/FileName
算法说明
timestamp:十六进制(UNIX 时间戳)。
md5hash:MD5(自定义密钥 + 文件路径 + timestamp)。
又拍云边缘规则实现:
一、判断格式是否正确
URI 字符串提取:
^.*?/(.*?)/([0-9a-fA-F]+)/(.*?)$
规则编辑器:
$WHEN($OR($NOT($1),$NOT($2),$NOT($3)))$EXIT(403)
二、判断时间戳是否有效(600s)
URI 字符串提取:
^.*?/(.*?)/([0-9a-fA-F]+)/(.*?)$
规则编辑器:
$WHEN($GE($MSUB($_TIME,600),$INT($2,16,10)))$EXIT(403)
三、判断MD5
URI 字符串提取:
^.*?/(.*?)/([0-9a-fA-F]+)/(.*?)$
规则编辑器:
$WHEN($NOT($EQ($MD5('在这里填入key保留右边这个斜杠/'$3$2),$LOWER($1)))))$EXIT(403)
四、URL改写
URI 字符串提取(可选)
^.*?/(.*?)/([0-9a-fA-F]+)/(.*?)$
改写规则
/$3
不做解释
TYPED:
访问 URL 格式
http://DomainName/FileName?sign=md5hash&t=timestamp
算法说明
timestamp:十进制。
md5hash:MD5(自定义密钥 + 文件路径 + timestamp)。
这个就比较简单了 只需要三步
一、判断参数
$WHEN($OR($NOT($_GET_t),$NOT($_GET_sign)))$EXIT(403)
二、判断时间戳(这里还是以十分钟为例)
$WHEN($GE($MSUB($_TIME,600), $_GET_t))$EXIT(401)
三、MD5判断
$WHEN($NOT($EQ($MD5('密钥'$_URI$_GET_t),$LOWER($_GET_sign))))$EXIT(403)