URL鉴权功能主要用于保护用户站点资源不被非法站点下载或盗用。阿里云CDN为您提供了三种鉴权方式,本文为您详细介绍鉴权方式C的原理和示例说明。
原理说明
- 鉴权方式C加密URL构成
- 格式1
http://DomainName/{<md5hash>/<timestamp>}/FileName
- 格式2
http://DomainName/FileName{&KEY1=<md5hash>&KEY2=<timestamp>}
说明{}
中的内容表示在标准URL基础上添加的加密信息。 - 格式1
- 鉴权字段说明
字段 描述 DomainName CDN站点的域名。 PrivateKey 用户自定义鉴权key,由16~32个字符(支持大写字母、小写字母、数字)组成。 FileName 实际回源访问的URL,鉴权时Filename需以 /
开头。timestamp 签算服务器生成鉴权URL的时间,与鉴权URL有效时长共同控制鉴权URL的失效时间。时间点取自签算服务器的Unix时间戳(Unix时间戳是从UTC时间1970年01月01日00时00分00秒到现在的总秒数,是十进制的整型正数,固定长度为10,与时区无关),以十六进制形式表示。 说明 多数情况下,鉴权URL的有效时长为CDN配置的鉴权URL有效时长。有时在签算增加鉴权URL的有效时长的,此时,timestamp=签算服务器上的Unix时间戳+签算服务器上加的有效时长;鉴权URL实际有效时长=timestamp+CDN配置的鉴权URL有效时长。md5hash 通过MD5算法计算出的字符串,由数字0-9和小写英文字母a-z混合组成,固定长度32。 - 鉴权逻辑说明CDN服务器接到资源访问请求后,判断最终生成鉴权URL请求中的
timestamp
+鉴权URL有效时长
是否小于当前时间。- 如果
timestamp
+鉴权URL有效时长
小于当前时间,服务器判定过期失效,并返回HTTP 403错误。 - 如果
timestamp
+鉴权URL有效时长
大于当前时间,则以sstring
方式构造出一个字符串,然后使用MD5算法算出md5hash
的值,再将计算出的md5hash
值与用户访问请求中携带的md5hash
的值进行比对。- 结果一致,鉴权通过,返回资源请求。说明 当鉴权通过时,会去掉URL中与鉴权相关的那部分参数,可以提高缓存命中率,减少回源流量:
- 格式1和格式2,实际生成缓存key的URL格式:
http://DomainName/FileName
- 格式1和格式2,实际回源的URL格式:
http://DomainName/FileName
- 格式1和格式2,实际生成缓存key的URL格式:
- 结果不一致,鉴权失败,返回HTTP 403错误。
- 结果一致,鉴权通过,返回资源请求。
- 如果
鉴权URL示例
通过以下示例说明,您可以准确理解鉴权方式C的实现方式。
- 示例条件
- 回源请求对象:
http://cdn.example.com/test.flv
说明 如果您的回源请求对象中有中文汉字,请先对其进行URL转码(即Encode),再进行鉴权URL的拼接。 - PrivateKey取值:
aliyuncdnexp1234
。 - timestamp取值:
55CE8100
。
- 回源请求对象:
- 拼接流程
- CDN服务器构造一个用于计算
md5hash
的签名字符串。aliyuncdnexp1234/test.flv55CE8100
- 根据该签名字符串,CDN服务器会计算出
md5hash
。md5hash = md5sum(aliyuncdnexp1234/test.flv55CE8100) = a37fa50a5fb8f71214b1e7c95ec7a1bd
- 生成鉴权URL。
- 格式一:
http://cdn.example.com/a37fa50a5fb8f71214b1e7c95ec7a1bd/55CE8100/test.flv
- 格式二:
http://cdn.example.com/test.flv?KEY1=a37fa50a5fb8f71214b1e7c95ec7a1bd&KEY2=55CE8100
- 格式一:
- CDN服务器构造一个用于计算
当使用客户端提供的加密URL进行访问时,如果CDN服务器计算出来的md5hash
值与访问请求中带的md5hash
值相同,都为a37fa50a5fb8f71214b1e7c95ec7a1bd,则鉴权通过,反之鉴权失败。