URL鉴权功能主要用于保护用户站点资源不被非法站点下载盗用。阿里云CDN为您提供了四种鉴权方式,本文为您详细介绍鉴权方式B的原理和示例说明。
原理说明
- 鉴权方式B加密URL构成 - http://DomainName/{<timestamp>/<md5hash>}/FileName说明- {}中的内容表示在标准URL基础上添加的加密信息。- 鉴权字段说明 - 字段 - 描述 - DomainName - CDN站点的域名。 - timestamp - 签算服务器生成鉴权URL的时间,与鉴权URL有效时长共同控制鉴权URL的失效时间。时间点取自签算服务器的“UTC+8”时间,格式为:YYYYMMDDHHMM。 说明- 多数情况下,鉴权URL的有效时长为CDN配置有效时长。有时在签算增加鉴权URL的有效时长的,此时,timestamp=Unix时间戳+增加的时长;鉴权URL实际有效时长=timestamp+CDN配置的时长。 - md5hash - 通过md5算法计算出的验证串,由数字0~9和小写英文字母a~z混合组成,固定长度32。 - md5hash的值通过以下字符串计算得到。- sstring = "Privatekey+timestamp+Path" (Path是用户的请求对象相对地址,不包含参数,如/Filename) md5hash = md5sum(sstring)- Filename - 实际回源访问的文件路径名,鉴权时Filename需以 - /开头。
- 鉴权逻辑说明 - CDN服务器接到资源访问请求后,判断 - timestamp+- 鉴权URL有效时长是否小于当前时间:- 如果 - timestamp+- 鉴权URL有效时长小于当前时间,服务器判定过期失效,并返回HTTP 403错误。
- 如果 - timestamp+- 鉴权URL有效时长大于当前时间,则以- string方式构造出一个字符串,然后使用MD5算法计算出- md5hash的值,再将计算出的- md5hash值与用户访问请求中携带的- md5hash的值进行比对。- 结果一致,鉴权通过,返回资源请求。 说明- 鉴权通过时,会去掉URL中与鉴权相关的那部分参数,这可以提高缓存命中率,减少回源流量: - 实际生成缓存key的URL格式: - http://DomainName/FileName
- 实际回源的URL格式: - http://DomainName/FileName
 
- 结果不一致,鉴权失败,返回HTTP 403错误。 
 
 
鉴权URL示例
以下示例说明鉴权方式B的实现。
- 示例条件 - 回源请求对象: - http://domain.example.com/4/44/44c0909bcfc20a01afaf256ca99a8b8b.mp3说明- 如果您的回源请求对象中有中文汉字,请先对其进行URL转码(即Encode),再进行鉴权URL的拼接。 - 原始URL: - https://example.com/image/阿里云.jpg
- 编码后的URL: - https://example.com/image/%E9%98%BF%E9%87%8C%E4%BA%91.jpg
 
- CDN站点的域名(DomainName): - domain.example.com。
- 时间戳(timestamp): - 201508150800。
- 密钥(Privatekey): - aliyuncdnexp1234。
- 用户请求相对地址(Path): - /4/44/44c0909bcfc20a01afaf256ca99a8b8b.mp3。
- 实际回源访问的文件路径名(Filename): - /4/44/44c0909bcfc20a01afaf256ca99a8b8b.mp3。
 
- 拼接流程 - 构造签名字符串: - // sstring="Privatekey+timestamp+Path" sstring=aliyuncdnexp1234201508150800/4/44/44c0909bcfc20a01afaf256ca99a8b8b.mp3
- 计算md5hash: - // md5hash = md5sum(sstring) md5hash = md5sum("aliyuncdnexp1234201508150800/4/44/44c0909bcfc20a01afaf256ca99a8b8b.mp3") = 9044548ef1527deadafa49a890a377f0
- 生成鉴权URL: - // 鉴权URL=http://DomainName/{<timestamp>/<md5hash>}/FileName http://domain.example.com/201508150800/9044548ef1527deadafa49a890a377f0/4/44/44c0909bcfc20a01afaf256ca99a8b8b.mp3
 
当使用客户端提供的加密URL进行访问时,如果CDN服务器计算出来的md5hash值与访问请求中带的md5hash值相同,都为9044548ef1527deadafa49a890a377f0,并且鉴权URL在有效期内,则鉴权通过;反之鉴权失败。