本文档介绍火山引擎内容分发网络(CDN)中 URL 鉴权模块的 D 类型配置。

控制台中的配置
在 CDN 控制台中,您需要做以下配置:
配置 | 说明 |
|---|
生效对象 | 表示一组匹配条件。CDN 对符合条件的用户请求进行鉴权。您至少需要添加一个条件,最多可以添加 10 条。您可以指定多个条件之间的关系,默认是 或。 或 表示匹配任何一个条件的请求就会被鉴权。且 表示只有匹配所有条件的请求才会被鉴权。每个条件包含匹配类型、匹配方式和匹配值。 匹配值的总长度不能超过 1,024 个字符,不能包含以下字符: - 连续斜杠(//)、空格、美元符号($)、问号(?)、Delete(ASCII code 127)。
同时, - 如果匹配类型是 文件后缀,匹配值必须是一个或者多个以分号(;)分隔的文件后缀。文件后缀无需以句点(.)开头。例如:
png;txt。 - 如果匹配类型是 文件目录,匹配值必须是一个或者多个以分号(;)分隔的目录路径。目录路径必须以斜杠(/)开头和结尾。例如:
/chs/foods/;/us/birds/。 - 如果条件匹配类型是 文件全路径,匹配值必须是一个或者多个以分号(;)分隔的文件路径。文件路径必须以斜杠(/)开头,可以包含星号(*)用来表示一个或者多个字符。例如:
/chs/foods/local*sets;/us/birds/chickadee。 - 如果匹配类型是 全路径正则表达式,匹配值必须是一个或者多个以分号(;)分隔的正则表达式,用于匹配请求 URL 中的路径。例如:
/a{1,2}(.*)g。要使用该匹配类型,请 提交工单。
|
主 KEY | 指定一个主密钥。密钥由 6-40 个字符组成,只能包含除了 Delete(ASCII code 127)的可打印 ASCII 字符。 |
备 KEY | 指定一个备密钥。密钥的输入要求与主 Key 相同。如果鉴权失败,CDN 会使用备密钥再计算一次签名并尝试与请求中的签名比对。 |
签名参数 | 指定请求的签名参数名称。参数名称的说明如下: - 不能超过 100 个字符。
- 大小写敏感。
- 可以包含字母、数字、下划线(_)、中划线(-)、句号(.)、逗号(,)、感叹号(!)。
- 至少包含一个字母或者数字。
- 不能与时间戳参数相同。
- 控制台中默认的签名参数是
sign。
|
有效时间 | 指定签名的有效时间,单位是秒。该配置与客户端请求中的 timestamp 参数搭配使用,用来计算签名的过期时间。该参数的取值范围是 0-315,360,000。签名的过期时间 = timestamp + 有效时间。在 CDN 收到某个请求时,如果请求中包含的签名的过期时间早于当前时间,CDN 判定签名已过期。此时,CDN 返回 403 响应状态码,表示鉴权失败。控制台中默认的有效时间是 1800。 |
时间戳参数 | 指定请求的时间戳参数的名称。参数名称的说明如下: - 不能超过 100 个字符。
- 大小写敏感。
- 可以包含字母、数字、下划线(_)、中划线(-)、句号(.)、逗号(,)、感叹号(!)。
- 不能与签名参数相同。
- 控制台中默认的签名参数是
t。
|
时间格式 | 指定 Unix 时间戳的格式。 |
鉴权算法 | 表示签名计算使用的算法。该配置有以下取值: - MD5:表示 MD5 算法。
- SHA256:表示 SHA-256 算法。
说明 SHA-256 算法的安全性比 MD5 高,生成的哈希值出现碰撞的几率比 MD5 低,但是加密和解密过程的耗时比 MD5 长。 |
M3U8 改写 | 表示在响应一个 .m3u8 文件的请求时,CDN 是否对 .m3u8 文件中每个分片文件的 URL 添加签名参数。每个分片 URL 的签名是基于改写后分片 URL,使用签名规则计算的。 说明 当前,CDN 不支持改写压缩文件。因此,在以下任意情况下,CDN 不会改写用户请求的 .m3u8 文件。 - 当 CDN 收到源站返回的 .m3u8 文件时,源站响应中包含 Content-Encoding 头部,表示该 .m3u8 文件是被压缩的。
- 该 .m3u8 文件的请求匹配 "智能压缩" 中的配置,表示 CDN 会对该 .m3u8 文件进行压缩。
该配置还包含以下配置。要使用这些配置,请 提交工单。 - 分片 URL 原参数:表示在改写分片 URL 时是否保留 URL 中原有的参数。
- 继承 M3U8 非签名参数:表示是否将来自该 M3U8 文件请求的不表示签名的查询参数添加到分片 URL 中。
需要留意的是,这两个配置会影响分片 URL 的签名计算。
例子:有一个分片 URL 是 /video.ts?version=1。您设置 分片 URL 原参数 是 删除,继承 M3U8 非签名参数 是 开启,用户的 M3U8 请求中的查询参数是 q_m3u8=cool。那么改写后的分片 URL 是 /video.ts?q_m3u8=cool,该分片的签名是基于这个改写后的 URL 计算的。 在更新分片 URL 时,CDN 可以识别以下格式: - 绝对路径的 URL。例如
https://example.com/xxx/yyy/song.ts - 以根目录路径开头的 URL。例如
/xxx/yyy/song.ts - 以相对路径开头的 URL。例如
yyy/song.ts
对于其他不符合规范的 URL 格式,CDN 可能会无法识别,导致签名参数添加失败。 |
保留鉴权参数 | 表示 CDN 是否在回源请求中包含用户请求中的签名参数。要使用该配置,请 提交工单。 |
鉴权计算器 | 参见 鉴权计算器说明。 |
请求 URL 格式
scheme://host/uri?sign=\<signature\>&t=timestamp(&...)
请求 URL 示例
https://www.example.com/product/cdn?sign=e954e253c33634b510443af72406600f&t=1620291453&query1=value1&query2=value2
签名计算公式
如果您在 URL 鉴权的配置中指定签名算法是 MD5,则签名 的计算公式如下:
md5(key + uri + timestamp)
如果您在 URL 鉴权的配置中指定签名算法是 SHA-256,则签名 的计算公式如下:
sha256(key + uri + timestamp)
说明
- 公式中的
+ 表示参数值的拼接,并不是实际的字符。 - MD5 值是由 32 个十六进制字符组成的。SHA-256 值由 64 个十六进制字符组成的。
签名计算公式中各参数的说明如下:
参数 | 描述 |
|---|
key | 表示在 CDN 控制台配置的密钥。 |
uri | 表示 请求 URL 格式 中的 uri 参数,以斜杠(/)开头,不包含域名。如果路径包含中文字符,您需要对路径编码。在 请求 URL 示例 中,该参数值是 /product/cdn。 |
timestamp | 表示 请求 URL 格式 中的 timestamp 参数。该参数与控制台中的 有效时间 配置搭配使用,用来计算签名的过期时间。根据控制台中的 时间格式 配置,时间格式使用十进制或十六进制的 Unix 时间戳。在 请求 URL 示例 中,该参数值是 1620291453,是一个十进制 Unix 时间戳。 |
鉴权流程
在收到包含签名的客户端请求时,CDN 使用的鉴权流程如下:
- 基于请求中包含的鉴权参数以及您在 CDN 控制台中配置的 key,使用 签名计算公式 计算签名。
- 判断 CDN 计算得到的签名和客户端请求中包含的签名是否一致。如果不一致,CDN 判断请求不合法,拒绝该请求。
- 判断请求是否过期。如果存在以下情况,CDN 判断请求过期,拒绝该请求。
- (客户端请求中的 timestamp 参数) + (您在 CDN 控制台中配置的有效时间) < (CDN 收到该请求的时间)