本指南介绍了如何生成令牌,以及 字段。
如需创建令牌,您需要构建要签名的字符串,我们在本指南中将其称为已签名值。已签名值包含用于描述您要保护的内容、已签名值的到期时间等的参数。
您在创建令牌字符串时将使用带符号的值。您可以通过组合令牌的参数(例如已签名值的对称密钥基于哈希的消息身份验证代码 [HMAC])来创建令牌字符串。
媒体 CDN 使用最终组合的令牌来帮助保护您的 内容。
创建令牌
使用 Ed25519 签名或对称密钥 HMAC 对已签名值进行签名。
通过串联包含必需令牌字段和可选令牌字段的字符串来组合令牌。请使用波浪符号
~
字符分隔各个字段和任何参数。在编写令牌时,每个参数的值都是 有符号值和令牌字符串之间的值相同,且 异常:
FullPath
Headers
以下代码示例展示了如何以编程方式创建令牌:
Python
如需向 Media CDN 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Java
如需向媒体 CDN 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
以下部分介绍了令牌使用的字段。
必填令牌字段
每个令牌都必须包含以下字段:
Expires
- 以下任一项:
PathGlobs
URLPrefix
FullPath
- 以下任意一项:
Signature
hmac
除非另有说明,否则参数名称及其值区分大小写。
下表介绍了各个参数:
字段名称/别名 | 令牌参数 | 有符号值 |
---|---|---|
|
自 Unix 纪元 (1970-01-01T00:00:00Z) 起经过的整秒数 | Expires=EXPIRATION_TIME ,令牌将在此时间之后过期。 |
|
要授予访问权限的路径片段(最多 5 个)的列表。这些片段可以用英文逗号 (
路径参数(用英文分号 ( 基于上述原因,请确保您的网址不包含以下内容
特殊字符: |
PathGlobs=PATHS |
URLPrefix |
可在网址中安全使用的 base64 编码网址,包括协议 例如, `https://example.com/foo/bar.ts` 为 `https://example.com`, “https://example.com/foo”和“https://example.com/foo/bar”。 |
URLPrefix=BASE_64_URL_PREFIX |
FullPath |
无。在令牌中指定 FullPath 时,请勿重复在已签名值中指定的路径。在令牌中,添加不带 = 的字段名称。 |
FullPath=FULL_PATH_TO_OBJECT |
Signature |
网络安全 base64 编码版本的签名。 | 不适用 |
hmac |
HMAC 值的可在网页上安全使用的 base64 编码版本。 | 不适用 |
PathGlobs
通配符语法
下表介绍了 PathGlobs
通配符语法。
运算符 | Matches | 示例 |
---|---|---|
* (星号) |
匹配网址路径中的零个或多个字符,包括
正斜线 (/ ) 字符。
|
|
? (问号) |
匹配网址路径中的单个字符,不包括正斜杠 (/ ) 字符。
|
/videos/s?main.m3u8 个匹配项
/videos/s1main.m3u8 。它与 /videos/s01main.m3u8 或 /videos/s/main.m3u8 都不匹配。
|
对于网址路径,正则表达式必须以星号 (*
) 或正斜杠 (/
) 开头。
由于 *
和 /*
会匹配所有网址路径,因此我们不建议
使用其中任意一种签名。为了最大限度提供保护,
确保您的 glob 与您打算授予访问权限的内容相匹配。
可选令牌字段
除非另有说明,否则参数名称及其值区分大小写。
下表介绍了参数名称、所有别名以及 可选参数:
字段名称/别名 | 参数 | 有符号值 |
---|---|---|
|
自 Unix 纪元 (1970-01-01T00:00:00Z) 以来的整数秒数 | Starts=START_TIME |
IPRanges |
一个最多包含 5 个 CIDR 格式的 IPv4 和 IPv6 地址列表,
此网址是有效的网络安全 base64 格式。例如,如需指定 IP 地址范围“192.6.13.13/32,193.5.64.135/32”,您可以指定 当客户端
或连接网络路径
应用前端不同于交付路径。
媒体 CDN 使用 以下情况可能会导致 Media CDN 使用
所有这些因素都会导致特定客户
非确定性 IP 地址。如果
但在您授予访问权限后,客户端 IP 地址会发生变化,
然后,客户端尝试将视频片段下载到其播放
它们会从 |
IPRanges=BASE_64_IP_RANGES |
|
任意字符串,适用于日志分析或回放 跟踪。 为避免创建无效令牌,请使用 % 编码或网络安全的 Base64 编码字符串。不得对 |
SessionID=SESSION_ID_VALUE |
|
一个任意字符串,对日志分析很有用。 为避免创建无效令牌,请使用 % 编码或网络安全的 Base64 编码字符串。不得对 |
data=DATA_VALUE |
Headers |
以英文逗号分隔的标头字段名称列表。标头名称为 不区分大小写。签名中的标头名称 值区分大小写。如果缺少标头,则值为空字符串。如果某个标头有多个副本,则会以英文逗号串联。 | Headers=HEADER_1_NAME=HEADER_1_EXPECTED_VALUE,
HEADER_2_NAME=HEADER_2_EXPECTED_VALUE |
示例
以下部分展示了生成令牌的示例。
使用 FullPath
的示例
请考虑以下使用 FullPath
字段的示例:
- 请求的项:
http://example.com/tv/my-show/s01/e01/playlist.m3u8
- 到期时间:160000000
带符号的值为:
Expires=160000000~FullPath=/tv/my-show/s01/e01/playlist.m3u8
要创建令牌,请使用 Ed25519 签名或 对称密钥 HMAC。
以下是使用已签名值创建的令牌示例:
Ed25519 签名
Expires=160000000~FullPath~Signature=SIGNATURE_OF_SIGNED_VALUE
其中 SIGNATURE_OF_SIGNED_VALUE 是之前创建的已签名值的 ED25519 签名。
对称密钥 HMAC
Expires=160000000~FullPath~hmac=HMAC_OF_SIGNED_VALUE
其中 HMAC_OF_SIGNED_VALUE 是已签名的对称密钥 HMAC 值。
在前面的示例中,令牌中提供了 FullPath
,但值
不从带符号值中指定的路径重复。这样,您就可以
签署请求的完整路径,而无需在令牌中复制请求。
使用 URLPrefix
的示例
请考虑以下使用 URLPrefix
字段的示例:
- 所请求的项:
http://example.com/tv/my-show/s01/e01/playlist.m3u8
- 到期时间:160000000
带符号值为:
Expires=160000000~URLPrefix=aHR0cDovL2V4YW1wbGUuY29tL3R2L215LXNob3cvczAxL2UwMS9wbGF5bGlzdC5tM3U4
在上面的示例中,我们将请求项的路径 http://example.com/tv/my-show/s01/e01/playlist.m3u8
替换为了采用网络安全 Base64 格式的项路径 aHR0cDovL2V4YW1wbGUuY29tL3R2L215LXNob3cvczAxL2UwMS9wbGF5bGlzdC5tM3U4
。
如需创建令牌,请使用 Ed25519 签名或对称密钥 HMAC 对已签名值进行签名。
以下是使用已签名值创建的令牌示例:
Ed25519 签名
Expires=160000000~URLPrefix=aHR0cDovL2V4YW1wbGUuY29tL3R2L215LXNob3cvczAxL2UwMS9wbGF5bGlzdC5tM3U4~Signature=SIGNATURE_OF_SIGNED_VALUE
其中 SIGNATURE_OF_SIGNED_VALUE 是之前创建的已签名值的 ED25519 签名。
对称密钥 HMAC
Expires=160000000~URLPrefix=aHR0cDovL2V4YW1wbGUuY29tL3R2L215LXNob3cvczAxL2UwMS9wbGF5bGlzdC5tM3U4~hmac=HMAC_OF_SIGNED_VALUE
其中 HMAC_OF_SIGNED_VALUE 是已签名的对称密钥 HMAC 值。
使用 Headers
的示例
请参考以下示例(使用 Headers
字段):
- 所请求的项:
http://example.com/tv/my-show/s01/e01/playlist.m3u8
- 到期时间:160000000
- PathGlobs 值:
*
- 预期请求标头:
user-agent: browser
accept: text/html
带符号值为:
Expires=160000000~PathGlobs=*~Headers=user-agent=browser,accept=text/html
要创建令牌,请使用 Ed25519 签名或 对称密钥 HMAC。
以下是使用已签名值创建的令牌示例:
Ed25519 签名
Expires=160000000~PathGlobs=*~Headers=user-agent,accept~Signature=SIGNATURE_OF_SIGNED_VALUE
其中 SIGNATURE_OF_SIGNED_VALUE 是之前创建的已签名值的 ED25519 签名。
对称密钥 HMAC
Expires=160000000~PathGlobs=*~Headers=user-agent,accept~hmac=HMAC_OF_SIGNED_VALUE
其中 HMAC_OF_SIGNED_VALUE 是之前创建的已签名值的对称密钥 HMAC。
在前面的示例中,令牌中提供了 Headers=user-agent,accept
,
但预期的标头值不会与带符号的值重复。这样,
您可以签署特定的请求标头键值对,而无需复制
标记中。