文档中心 Content Acceleration 鉴权模式C和鉴权模式D

鉴权模式C和鉴权模式D

更新时间:2024-11-18 10:20:55

目录


本文将为您详细介绍鉴权模式C和鉴权模式D的原理和使用说明。

鉴权URL构成及说明

鉴权模式C和鉴权模式D允许您将鉴权信息作为请求参数附加在URL中。以下是这两种模式的URL格式:
鉴权模式C

http://domain/uri?key=signature&time=timestamp

鉴权模式D

http://domain/uri?time=timestamp&key=signature

在上述URL结构中,keytime分别代表鉴权签名和生成URL的时间戳。这些鉴权参数被添加到URL中后,CDN边缘服务器将验证这些信息,并根据验证结果决定是否提供用户请求的内容。与鉴权模式A和鉴权模式B类似,一旦配置后,keytime的顺序将被固定,客户端的请求也必须按照这个顺序携带相应参数,否则请求将被CDN边缘服务器拒绝。

在模式C和模式D中,keytime作为请求参数,其名称是可以自定义的。关于如何修改鉴权请求参数的名称,请参照本文的密钥参数名时间参数名部分。

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

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

CDN边缘的鉴权逻辑

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

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

如何配置模式C和模式D

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

自定义加密密钥($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中鉴权签名参数的名称,该参数在我们的系统中默认被命名为key。您可以通过设置密钥参数名来自定义这个参数的名称。例如,如果将该参数的名称设置为cdnwkey,则客户端可以使用类似 http://cdnetworks.com/browse/index.html?cdnwkey=abc&time=123形式的URL来向CDN请求内容。

时间参数名

时间参数名是时间戳鉴权参数的名称,该参数在我们的系统中默认被命名为time。您可以通过设置时间参数名来自定义这个参数的名称。例如,如果将该参数的名称设置为cdnwtime,,则客户端可以使用类似 http://cdnetworks.com/browse/index.html?key=abc&cdnwtime=123形式的URL来向CDN请求内容。

有效时间(秒)

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

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

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

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

key和time的位置允许互换

默认情况下,在模式C和模式D中,鉴权加密字符串和时间戳(即keytime参数)在URL中的位置是固定的,必须严格遵循鉴权模式C和模式D规定的顺序,不得互换。如果您将key和time的位置允许互换选项设置为,则keytime的位置可以互换。

例如,以下两种URL都将被CDN边缘服务器判定为鉴权通过,内容将会被响应给客户端:

http://cdnetworks.com/browse/index.html?key=abc&time=123
http://cdnetworks.com/browse/index.html?time=123&key=abc

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

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

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

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