文档中心 Content Acceleration 访问控制 鉴权模式A和鉴权模式B

鉴权模式A和鉴权模式B

更新时间:2024-11-18 10:19:21

CDNetworks为您提供了五种不同的鉴权模式,本文将为您详细介绍鉴权模式A和鉴权模式B的原理和使用说明。

鉴权URL构成及说明

鉴权模式A和鉴权模式B,这两种模式允许您直接在URL的访问路径中嵌入鉴权信息。以下是这两种模式的URL格式:

鉴权模式A

http://domain/<time>/<key>/uri

鉴权模式B

http://domain/<key>/<time>/uri

在以上URL结构中,<key><time>是添加的鉴权信息。CDN边缘服务器将验证这些鉴权信息,并根据验证结果决定是否提供用户请求的内容。值得注意的是,模式A和模式B中鉴权信息<key><time>的顺序是固定的,无法更改。

注意:在以上URL示例中,我们使用了<>来表示鉴权参数的位置,实际URL中不会包含这些符号。在实际应用中,您只需按照指定的格式构建URL即可。

关于鉴权URL中各字段的说明

字段 说明
domain 指您在 CDNetworks 平台上注册的域名。
time 鉴权URL包含一个时间戳,这个时间戳标明了URL的生成时刻。CDN边缘服务器会依据这个时间戳来判断URL是否仍在设定的有效期内。如果CDN检测到当前时间已超过URL设定的有效期,那么它将不再向用户提供该内容。
请特别注意,time 值必须遵循预设的时间格式;若格式有误,鉴权将会失败。具体支持的时间格式,请参见本文 时间格式 部分。
key 鉴权校验用的加密字符串,通常由时间戳 time、加密密钥 ourkey 和实际访问路径 uri 组合后进行加密得到。关于如何计算这一鉴权参数的详细信息,请参考本文 密钥计算参数 部分。
uri 实际请求CDN的URL地址部分,例如,如果原始请求URL为 http://cdnetworks.com/browse/index.html,则 uri 应为 /browse/index.html。注意,如果请求URL包含额外参数(例如 /browse/index.html?user=123),则 uri 应仅包括请求对象的路径,不包括问号及其后的参数。

CDN边缘的鉴权逻辑

当CDN边缘服务器接收到用户的访问请求后,首先会验证鉴权URL中的time参数是否已过期:

  • 如果 time 参数加上鉴权URL的有效时长小于当前时间,则CDN边缘服务器会判断该URL已失效,不提供内容并返回 HTTP 403 错误。
  • 如果 time 参数加上鉴权URL的有效时长不小于当前时间,CDN边缘服务器将认为该URL有效。接下来,服务器会计算请求URL应有的鉴权加密字符串 key 值,并将其与用户请求中携带的 key 值进行比对。如果两者匹配,则鉴权成功,服务器将响应用户请求并提供内容;如果不匹配,请求将被拒绝,并返回 HTTP 403 错误。

如何配置模式A和模式B

鉴权模式设置中,您可以根据需要勾选模式A模式B来进行相应的配置。接下来,我们将为您详细解释各个配置字段的用途和设置方法。

自定义加密密钥($ourkey)

自定义加密密钥($ourkey)是一个独特的字符串,它专门用于生成URL中的鉴权加密字符串key。由于该密钥仅为您和我们的CDN服务器所共享,因此它极大地增强了URL鉴权参数的安全性,使其难以被未经授权的第三方破解和伪造。在控制台中,您可方便地设置多个ourkey值,并通过;符号将它们分隔开。

当您配置了多个ourkey时,CDN边缘服务器在接收到客户端请求时,会按照您预先设定的顺序,逐一尝试使用这些值进行鉴权。如果首个配置的ourkey未能验证成功,服务器将自动转向下一个配置的ourkey进行验证,以此类推,直至找到有效的鉴权密钥或所有密钥均验证失败。

时间格式

在构建鉴权URL时,对于时间字段 time ,我们提供了五种可选的格式以满足您的不同需求:

时间戳格式 说明
十进制Unix时间戳 例如,1586338211 表示 2020年4月8日17:30:11 UTC。
十进制Unix时间戳 转换为十六进制的十进制Unix时间戳,例如,5e8e2463 对应 1586338211 的十六进制形式,同样表示2020年4月8日17:30:11 UTC。
毫秒级别的Unix时间戳 精确到毫秒的十进制Unix时间戳,例如,1586338211000代表上述相同的时间点,精确到毫秒。
YYYYMMDDHHMMSS 一种常见的日期时间格式,表示为年月日时分秒,例如,20200408173011 表示 2020年4月8日17:30:11
YYYYMMDDHHMM 类似于前一个格式,但不包括秒。例如,202004081730 表示 2020年4月8日17:30。

密钥计算方式

鉴权加密字符串key的生成依赖于特定的加密算法。当前,我们默认使用MD5算法进行加密,但出于系统安全性的考虑,该算法暂不支持通过控制台直接更改。若您希望采用其他加密算法以提高安全性,请与我们专业的技术支持团队联系,他们将会协助您完成默认加密算法的更换工作。

密钥计算参数

在生成URL中的鉴权加密字符串key时,您可以选择性地包含以下参数:时间戳字段time、自定义加密密钥ourkey以及URL请求地址uri。关于这些字段的详细解释,请参阅先前的文档关于鉴权URL中各字段的说明

在构建加密字符串key的过程中,您可以选择包含上述参数中的一个或多个,并指定它们的组合顺序。例如,若您选择$uri$ourkey$time作为组合顺序,这表示:

  • URL请求地址(uri)作为起始部分;
  • 接着是自定义加密密钥(ourkey);
  • 最后是时间戳(time)。

以原始请求URL http://cdnetworks.com/browse/index.html 为例,假设配置的加密密钥(ourkey)为cdnetworks,时间戳(time)为202405131620。当您设置计算参数模式为$uri$ourkey$time时,生成的未加密字符串key将是/browse/index.htmlcdnetworks202405131620

有效时间(秒)

为满足您的不同需求,我们提供了三种配置有效时间的方法,用于管理URL中鉴权信息的有效期。

  • 配置有效期上限: 如果您希望设定鉴权信息的最大有效期,只需直接输入一个非负整数(例如,60)。这个数字表示从URL中的时间戳字段time指定的时间开始,多少秒之后鉴权信息将不再有效。例如,如果输入60,则鉴权信息将在时间戳后的一分钟内有效。

  • 配置有效期上下限: 如果您希望设定鉴权信息的有效时间范围,请输入两个用逗号分隔的数值。第一个数值表示从时间戳开始之前的多少秒内鉴权信息有效(即下限,应小于等于0),第二个数值表示从时间戳开始之后的多少秒内鉴权信息有效(即上限,应大于等于0)。例如,如果输入-60,60,则鉴权信息将在时间戳前一分钟到时间戳后一分钟的范围内有效。

  • 不进行有效期校验: 如果您不希望系统对鉴权信息的有效期进行任何校验,可以简单地输入一个减号-。在这种配置下,系统将不会对鉴权信息的有效期进行任何检查或限制。

key和time的位置允许互换

模式A模式B下,鉴权加密字符串和时间戳(keytime参数)在URL中的位置是固定的,必须严格遵循各自鉴权模式所规定的顺序,不得互换。因此,这个配置项在模式A和模式B下将不发挥作用

如何验证URL鉴权配置是否正确

因为URL鉴权配置相对复杂,为了避免错误的配置对您的线上业务造成影响,建议您先将配置部署到测试环境。确认配置无误后,再将其正式生效至线上环境。关于如何将配置部署到测试环境,请参考教程 通过预部署来验证配置是否生效

此外,您可以使用 CDN 控制台上提供的时间戳防盗链计算器CDNetworks Supports Let's Encrypt Certificate自动生成 URL 鉴权参数,以验证配置是否符合您的预期。访问文档 URL鉴权计算器,获取更多使用细节。

本篇文档内容对您是否有帮助?
有帮助
我要反馈
提交成功!非常感谢您的反馈,我们会继续努力做到更好!