原理说明
- 鉴权方式A访问URL构成:
http://DomainName/Filename?auth_key=timestamp-rand-uid-md5hash。
下文以如下URL作为示例:http://test.ctyun.cn/test/test.mp4?auth_key=timestamp-rand-uid-md5hash。
- URL鉴权字段说明:
字段 | 描述 |
---|---|
DomainName | CDN加速域名。 |
Filename | 实际回源访问的URI,即域名后面"/"开头截止到"?"之前的部分。即如上示例中的:/test/test.mp4。 |
auth_key | 设定的鉴权参数名,默认为auth_key,也可自定义。 |
timestamp | 1. 鉴权URL生成的时间,即:鉴权开始时间,值为从1970年1月1日0点至当前时间的总秒数 ,是十进制整数。 2. 与鉴权URL有效时长共同控制鉴权URL的失效时间。鉴权URL实际有效期=timestamp+CDN配置的鉴权URL有效时长。 |
rand | 随机数。0 - 64位随机字符串,由大小写字母与数字组成,例如:477b3bbcf6711128c7bec。 |
uid | 用户ID,暂未使用,设置成0即可。 |
md5hash | 通过MD5算法计算出的32位字符串。计算公式如下:md5hash = md5sum(Filename-timestamp-rand-uid-key)。 1. md5加密元素分隔符默认中划线(-),也可自定义。 2. 这里的key为用户设定的鉴权秘钥,长度6到32,由大小写字母与数字组成,例如:ctcdnkey123。 |
- 校验方法
CDN服务器接收到请求后,会按照如下步骤进行校验:
- 鉴权参数校验:如果没有携带鉴权参数,认为请求非法,返回HTTP 403错误。
- 时间校验:判断系统当前时间是否在区间[timestamp,timestamp+有效时间]内。超出该区间,认为过期失效并返回HTTP 403错误。
- 加密串校验:时间校验通过后,比对CDN服务器计算出来的md5hash值与访问请求中带的md5hash值是否相同,结果一致则认为鉴权通过并返回文件,否则鉴权失败返回HTTP 403错误。
配置示例
- 配置页面
- 配置参数说明
参数名 | 说明 | 示例 |
---|---|---|
加密key | 设定的鉴权密钥,多个以英文逗号分割,最多支持3个。 | 123 |
加密元素分隔符 | 默认使用中划线(-),也可自定义。 | - |
加密参数 | 默认为auth_key,也可自定义。 | auth_key |
鉴权URL有效时长 | 判断时间戳是否过期,单位秒。 | 300 |
- 示例说明
- 回源请求URL:http://test.ctyun.cn/test/test.mp4。
- 根据上述配置示例,加密key为123,生成鉴权URL时间为:2023年11月1日0时0分0秒,转化为十进制的整型数值为:1698768000。
- 需加密的字符串:/test/test.mp4-1698768000-0-0-123。
- 加密字符串:md5hash=md5sum(/test/test.mp4-1698768000-0-0-123)=37e38e6af36a27d1870e0dd2bcfbd18c。
- 鉴权URL:http://test.ctyun.cn/test/test.mp4?auth_key=1698768000-0-0-37e38e6af36a27d1870e0dd2bcfbd18c。
- CDN服务器接收到请求后,进行校验:
- 是否携带鉴权参数auth_key。如果没有携带,认为请求非法,返回HTTP 403错误。
- 根据上述配置示例,鉴权URL有效时长为300s,则判断系统当前时间是否在2023年11月1日0时0分0秒-2023年11月1日0时5分0秒之间,是则执行后续鉴权逻辑,超过该区间则返回HTTP 403错误。
- 时间校验通过后,比对CDN服务器计算出来的md5hash值与访问请求中带的md5hash值是否一致,一致则认为鉴权通过并返回文件,否则鉴权失败返回HTTP 403错误。
注意事项
开启鉴权方式A,请求的URL会携带鉴权参数,缓存key和回源URL默认也会增加对应参数,为避免缓存命中率和回源受到影响需增加缓存及回源配置。
- 缓存配置:忽略鉴权参数缓存,详情请见:缓存key设置。
配置示例:忽略auth_key参数缓存。
注意CDN缓存过期时间设置中,默认开启“去问号缓存”,此情况下开启鉴权方式A后,无需额外设置忽略鉴权参数缓存。相关文档详情请见:缓存过期时间设置。
- 回源配置:忽略鉴权参数回源,详情请见:回源参数改写。
配置示例:回源删除auth_key参数。