主要还是使用又拍的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)


沉淪在無盡的深淵中...