鉴权方式B
CDN分发的内容默认为公开资源,URL鉴权功能主要用于保护用户站点资源,防止资源被用户恶意下载盗用。华为云CDN提供了4种URL鉴权配置。本章为您详细介绍鉴权方式B的实现方式。
- URL鉴权功能默认关闭。
- 如果您的域名有特殊配置,暂不支持控制台自助配置URL鉴权。
- 业务类型为“全站加速”的域名暂不支持配置“鉴权方式B”。
- 配置鉴权后,用户将携带鉴权参数访问。如果您没有配置“忽略URL参数”:
- 会增大回源概率。
- 如果您的源站为对象存储桶,将会产生桶的流量流出费用。
原理说明
用户访问加密URL构成:
http://DomainName/timestamp/sha256/FileName
http://DomainName/timestamp/md5hash/FileName
当鉴权通过时,实际回源的URL为:
http://DomainName/FileName
鉴权字段描述如下表所示:
字段 |
描述 |
---|---|
DomainName |
CDN加速域名。 |
timestamp |
鉴权服务器生成鉴权URL的时间,即:鉴权开始时间,时间点取自鉴权服务器的“UTC+8”时间,格式为YYYYMMDDHHMM,如:201706301000。 |
有效时间 |
鉴权有效的时间长度,取值为0~31536000s。 示例:如果设置有效时间为1800s,则当前时间小于或等于“timestamp+1800s”时,用户才可以访问CDN。当前时间大于“timestamp+1800s”时,判定为失效。 |
md5hash |
通过md5算法计算出来的验证串,数字0-9和小写英文字母a-z混合组成,固定长度32。 |
sha256 |
通过sha256算法计算出来的验证串,数字0-9和小写英文字母a-z混合组成,固定长度64。 |
Filename |
实际回源访问的URL,鉴权时Filename需以/开头。不包含?后面的参数。 |
PrivateKey |
用户设定的鉴权密钥,来生成加密URL。如huaweicloud12345。由6~32位大/小写字母和数字构成。 |
校验方法
CDN服务器收到请求后,会按照如下步骤进行校验:
- 是否携带鉴权参数。如果没有携带鉴权参数,认为请求非法,返回HTTP 403错误。
- 时间校验:CDN服务器接收到客户端请求后,判断鉴权URL中的“timestamp参数 + 鉴权URL有效时长”是否大于当前时间。
- 如果“timestamp参数 + 鉴权URL有效时长”小于当前时间,认为过期失效并返回HTTP 403错误。
- 如果“timestamp参数 + 鉴权URL有效时长”大于或等于当前时间,则通过时间校验,继续执行步骤3。
- 加密串校验:时间校验通过后,则以sstring方式构造出一个字符串(参考以下sstring构造方式)。然后使用md5(sha256)算法算出HashValue,并和用户请求中带来的md5hash(sha256)进行对比。结果一致则认为鉴权通过并返回文件,否则鉴权失败返回HTTP 403错误。HashValue计算方式如下:
sstring = “PrivateKeytimestampFilename” HashValue = sha256sum(sstring)
或:sstring = “PrivateKeytimestampFilename” HashValue = md5sum(sstring)
操作步骤
- 登录华为云控制台,在控制台首页中选择“CDN与智能边缘 > 内容分发网络 CDN”,进入CDN控制台。
- 在左侧菜单栏中,选择 。
- 在域名列表中,单击需要修改的域名或域名所在行的“设置”,进入域名配置页面。
- 选择“访问控制”页签,单击“URL鉴权配置”,进入配置弹窗。
图1 配置URL鉴权
- 打开“状态”开关。
- 参照下表配置参数,单击“确定”,完成配置。
表2 参数说明 参数
说明
鉴权方式
选择“方式B”。
鉴权范围
指定哪些文件参与鉴权,目前仅支持选择所有文件、指定文件后缀鉴权、指定文件后缀不鉴权。
鉴权继承配置
为M3U8/MPD索引文件下的TS/MP4文件添加鉴权参数,解决因鉴权不通过导致的TS/MP4文件无法播放的问题。
说明:- 如果嵌套多层M3U8/MPD文件,仅解析第一层M3U8/MPD文件,不展开嵌套M3U8/MPD文件的TS/MP4流。
- 支持标准M3U8格式(按行解析:解析不成功时返回原值,支持以标签#EXT-X-MAP开头的URI,支持以非#开头的URL/URI)。
- 支持标准MPD格式(按行解析:解析不成功时返回原值,识别标签<BaseURL></BaseURL>之间的URI,不支持标签SegmentTemplate)。
- 如果您的M3U8/MPD索引文件中含有中文或特殊字符,CDN在鉴权计算时不会自动转码。如果客户端访问时存在自动将中文或特殊字符转码逻辑,可能导致鉴权不通过,从而访问失败。
- 如果源站响应给CDN节点的是压缩(Gzip和Brotli)后的资源,则鉴权继承配置失效。
鉴权继承开始时间
- 与M3U8/MPD访问链一致:鉴权开始时间取M3U8/MPD访问的时间。
- 当前时间:鉴权开始时间取鉴权服务器的当前时间。
文件后缀
当需要指定文件类型时填写此参数,指定特定后缀的文件参与或者不参与鉴权。
- 仅支持小写字符、数字,多个文件后缀用“;”分隔。
鉴权KEY
鉴权密码,由6~32位大/小写字母和数字构成。
说明:为了增加安全性,建议设置8~32位字母+数字组成的密码。
鉴权KEY(备)
鉴权备用密码,可不用配置。当需要替换密钥时,如果需要新旧密钥同时生效,可设置备KEY。主、备KEY之一鉴权通过即可正常访问。
- 由6~32位大/小写字母和数字构成。
说明:
为了增加安全性,建议设置8~32位字母+数字组成的密码。
加密算法
用于信息加密的算法,可选MD5或SHA256。
有效时间长度
鉴权有效的时间长度,取值为0~31536000s。
鉴权计算器
鉴权计算器是为了方便您生成鉴权URL以供用户使用,根据表2和表3设置不同的参数后,单击“生成”即可生成鉴权URL和过期时间。
表3 参数说明 参数
说明
鉴权KEY
鉴权密码,由6~32位大/小写字母和数字构成,与鉴权配置中的密码一致。
访问路径
资源所在路径,以/开头,无需携带参数。
加密算法
用于信息加密的算法,可选MD5或SHA256。
开始时间
鉴权URL的生效起始时间。
有效时间长度
鉴权URL的有效时间,取值为0~31536000s。最大值为鉴权配置中设置的有效时间。
示例:鉴权配置中设置的有效时间长度为1800秒,鉴权计算器中设置2000秒,那么有效时间依然是1800秒。
如果您的鉴权URL中含有中文或特殊字符,请先进行URL转码(即Encode)后使用。
关闭URL鉴权
关闭“状态”开关即可关闭URL鉴权配置,此时所有配置将被清空,下次启用URL鉴权功能时需要重新配置相关参数。
示例说明
以使用MD5算法为例:
- 回源请求对象:
http://hwcdn.example.com/T128_2_1_0_sdk/0210/M00/82/3E/test.mp3
- 密钥设为:huaweicloud12345(用户自行设置)
- 用户访问客户源服务器时间为:201706301000(格式为:YYYYMMDDHHMM)
- CDN服务器构造一个用于计算md5hash的签名字符串:
huaweicloud12345201706301000/T128_2_1_0_sdk/0210/M00/82/3E/test.mp3
- CDN服务器根据该签名字符串计算md5hash:
md5hash = md5sum("huaweicloud12345201706301000/T128_2_1_0_sdk/0210/M00/82/3E/test.mp3") =668f28d134ec6446a8ae83a43d0a554b
- 请求CDN时URL:
http://hwcdn.example.com/201706301000/668f28d134ec6446a8ae83a43d0a554b/T128_2_1_0_sdk/0210/M00/82/3E/test.mp3
如果请求在有效时间内(请求时间小于等于2017年6月30日10:30:00),并且计算出来的md5hash与用户请求中带的md5hash值(668f28d134ec6446a8ae83a43d0a554b)一致,则鉴权通过。