本指南介绍了如何生成令牌,以及令牌的必填字段和选填字段。
如需创建令牌,您需要编写一个要签名的字符串,在本指南中,我们将其称为“签名值” 。签名值包含用于描述您要保护的内容、签名值的到期时间等的参数。
您可以在创建令牌字符串时使用签名值。您可以通过编写令牌的参数(例如签名值的对称密钥哈希消息身份验证代码 (HMAC))来创建令牌字符串。
Media CDN 使用最终编写的令牌来帮助保护您的内容。
创建令牌
使用 Ed25519 签名或 对称密钥 HMAC 对签名值进行签名。
通过串联包含必填令牌字段和选填令牌字段的字符串来编写令牌。使用波浪号
~字符分隔每个字段和任何参数。编写令牌时,签名值和令牌字符串中每个参数的值相同,但以下情况除外:
FullPathHeaders
以下代码示例展示了如何以编程方式创建令牌:
Python
如需向 Media CDN 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅 为本地开发环境设置身份验证。
Java
如需向 Media CDN 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅 为本地开发环境设置身份验证。
以下部分介绍了令牌使用的字段。
必填令牌字段
每个令牌都必须包含以下字段:
Expires- 以下任一字段:
PathGlobsURLPrefixFullPath
- 以下任一字段:
Signaturehmac
除非另有说明,否则参数名称及其值区分大小写。
下表介绍了每个参数:
| 字段名称 / 别名 | 令牌参数 | 签名值 |
|---|---|---|
|
自 Unix 纪元 (1970-01-01T00:00:00Z) 以来经过的整数秒数 | Expires=EXPIRATION_TIME,之后令牌将失效。 |
|
最多五个路径段的列表,用于授予访问权限。这些段
可以使用英文逗号 (
不允许使用路径参数(使用分号 ( 因此,请确保您的网址不包含以下
特殊字符: |
PathGlobs=PATHS |
URLPrefix |
可在网络中安全使用的 base64 编码网址,包括协议
例如,对于 `https://example.com/foo/bar.ts`,一些有效的 网址Prefix 值包括 `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 |
可在网络中安全使用的 base64 编码 HMAC 值版本。 | 不适用 |
PathGlobs 通配符语法
下表介绍了 PathGlobs 通配符语法。
| 运算符 | Matches | 示例 |
|---|---|---|
*(星号) |
匹配网址路径中的零个或多个字符,包括
正斜线 (/) 字符。
|
|
?(问号) |
匹配网址路径中的单个字符,不包括正斜线 (/) 字符。 |
/videos/s?main.m3u8 匹配
/videos/s1main.m3u8。它不匹配
/videos/s01main.m3u8 或 /videos/s/main.m3u8。
|
对于网址路径,Glob 必须以星号 (*) 或正斜线 (/)
开头。
由于 * 和 /* 匹配所有网址路径,因此我们不建议
在签名令牌中使用它们。为了获得最大程度的保护,请确保您的 Glob 与您打算授予访问权限的内容相匹配。
选填令牌字段
除非另有说明,否则参数名称及其值区分大小写。
下表介绍了选填参数的参数名称、任何别名和详细信息:
| 字段名称 / 别名 | 参数 | 签名值 |
|---|---|---|
|
自 Unix 纪元 (1970-01-01T00:00:00Z) 以来经过的整数秒数 | Starts=START_TIME |
IPRanges |
最多五个 IPv4 和 IPv6 地址的列表,采用 CIDR 格式,
这些地址可在网络安全 base64 格式的网址中使用。例如,如需指定 IP 范围“192.6.13.13/32,193.5.64.135/32”,您可以指定
当客户端面临 WAN 迁移风险或应用前端的网络路径与传送路径不同时,在令牌中添加 IPRanges 可能没有帮助。当客户端使用不属于签名请求的 IP 地址进行连接时,Media CDN 会拒绝客户端并返回 在以下情况下,Media CDN
可能会拒绝客户端并返回
所有这些因素都可能导致给定客户端在视频播放会话期间具有
不确定的 IP 地址。如果您在授予访问权限后客户端 IP 地址发生变化,并且客户端尝试将视频段下载到其播放缓冲区中,则会收到来自 Media CDN 的 |
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: browseraccept: 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,但预期标头值不会从签名值重复。这样,您就可以对特定的请求标头键值对进行签名,而无需在令牌中重复这些值。