通过本文您可以详细了解鉴权配置的功能原理和操作步骤。
概述
URL鉴权功能旨在保护用户站点的内容资源不被非法站点下载盗用。采用防盗链方法添加referer黑、白名单方式可以解决部分盗链问题。但由于referer内容可以伪造,referer防盗链方式还不能很好的保护站点资源,因此采用URL鉴权方式保护用户源站资源更为安全有效。
原理
URL鉴权功能是通过阿里云SCDN加速节点与客户资源站点配合实现的一种更为安全可靠的源站资源防盗方法。由SCDN客户站点提供给用户加密URL(包含权限验证信息),用户使用加密后的URL向加速节点发起请求,加速节点对加密URL中的权限信息进行验证以判断请求的合法性,对合法请求给予正常响应,拒绝非法请求,从而有效保护SCDN客户站点资源。
URL鉴权方式
阿里云SCDN兼容并支持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。
字段 | 描述 |
---|---|
timestamp | 失效时间,整形正数,固定长度10,1970年01月01日以来的秒数。用来控制失效时间,10位整数,有效时间1800s。 |
rand | 随机数,一般设成0。 |
uid | 暂未使用(设置成0即可)。 |
md5hash | 通过MD5算法计算出的验证串,数字和小写英文字母混合0~9、a~z,固定长度32。 |
SCDN服务器拿到请求后,首先会判断请求中的timestamp
是否小于当前时间,如果小于,则认为过期失效并返回HTTP 403错误。如果timestamp
大于当前时间,则构造出一个同样的字符串(参考以下sstring构造方式)。然后使用MD5算法算出HashValue
,再和请求中带来的md5hash
进行比对。比对结果一致,则认为鉴权通过,返回文件。否则鉴权失败,返回HTTP 403错误。
HashValue
是通过以下字符串计算出来的:
sstring = "URI-Timestamp-rand-uid-PrivateKey" (URI是用户的请求对象相对地址,不包含参数,如 /Filename)
HashValue = md5sum(sstring)
示例说明
- 通过
req_auth
请求对象:http:// cdn.example.com/video/standard/1K.html
- 密钥设为:aliyuncdnexp1234(由用户自行设置)。
- 鉴权配置文件失效日期为:2015年10月10日00:00:00,计算出来的秒数为1444435200。
- 则SCDN服务器会构造一个用于计算Hashvalue的签名字符串:
/video/standard/1K.html-1444435200-0-0-aliyuncdnexp1234"
- SCDN服务器会根据该签名字符串计算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是:
http://DomainName/FileName
鉴权字段描述
- 注意:
PrivateKey
由CDN客户自行设置。 - 有效时间1800s是指,用户访问客户源服务器时间超过自定义失效时间(timestamp字段指定)的1800s后,该鉴权失效;例如用户设置访问时间2020-08-15 15:00:00,链接真正失效时间是2020-08-15 15:30:00。
字段 | 描述 |
---|---|
DomainName | SCDN客户站点的域名 |
timestamp | 资源失效时间,作为URL的一部分,同时作为计算md5hash 的一个因子,格式为:YYYYMMDDHHMM,有效时间1800s |
md5hash | 以timestamp、FileName和预先设定好的 PrivateKey 共同做MD5获得的字符串,即 md5(PrivateKey +timestamp +FileName )
|
FileName | 实际回源访问的URL(注意,鉴权时候FileName要以/开头) |
示例说明
- 回源请求对象:
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
- 请求SCDN时URL:
http://cdn.example.com/201508150800/9044548ef1527deadafa49a890a377f0/4/44/44c0909bcfc20a01afaf256ca99a8b8b.mp3
计算出来的md5hash与用户请求中带的md5hash=9044548ef1527deadafa49a890a377f0值一致,于是鉴权通过。
C鉴权方式
原理说明
用户访问加密 URL 格式
格式1:http://DomainName/{<md5hash>/<timestamp>}/FileName
格式2:http://DomainName/FileName{&KEY1=<md5hash>&KEY2=<timestamp>}
- 花括号中的内容表示在标准的URL基础上添加的加密信息。
<md5hash>
是验证信息经过MD5加密后的字符串。<timestamp>
是未加密的字符串,以明文表示。固定长度10,1970年01月01日以来的秒数,表示为十六进制。- 采用格式一进行URL加密,例如:
http://cdn.example.com/a37fa50a5fb8f71214b1e7c95ec7a1bd/55CE8100/test.flv
<md5hash>
为a37fa50a5fb8f71214b1e7c95ec7a1bd<timestamp>
为 55CE8100。
鉴权字段描述
<md5hash>
部分字段描述:
字段 | 描述 |
---|---|
PrivateKey | 干扰串,不同客户采用不同的干扰串。 |
FileName | 实际回源访问的URL(注意,鉴权时候path要以/开头)。 |
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访问加速节点,SCDN服务器会先把加密串1提取出来,并得到原始的URL的<FileName>
部分,用户访问时间,然后按照定义的业务逻辑进行验证:
- 使用原始的URL中的
<FileName>
部分,请求时间及PrivateKey进行MD5加密得到一个加密串2。 - 比较加密串2与加密串1是否一致,如果不一致则拒绝。
- 取加速节点服务器当前时间,并与从访问URL中所带的明文时间相减,判断是否超过设置的时限t(时间域值t默认为1800s)。
- 有效时间1800s是指,用户访问客户源服务器时间超过自定义时间的1800s后,该鉴权失效;例如用户设置访问时间2020-08-15 15:00:00,链接真正失效时间是2020-08-15 15:30:00。
- 时间差小于设置时限的为合法请求,SCDN节点才会给予正常的响应,否则拒绝该请求,返回http 403错误。
操作步骤
-
SCDN域名管理页,选择相应域名进入配置页。
-
选择访问控制-URL鉴权。
-
即可进行鉴权规则设置。