本文档介绍如何在火山引擎内容分发网络(CDN)中配置 URL 鉴权。
背景
CDN 提供了 "Referer 黑白名单","Origin 黑白名单" 和 "IP 黑白名单" 对用户请求进行过滤。但是在某些情况下,Referer, Origin 和 IP 可以被伪造,容易造成站点资源被恶意盗用。如果您对于站点内容的安全性有很高的要求,可以采用 URL 鉴权。
URL 鉴权工作原理
客户端在发送请求至服务端时,按照您设定的签名规则计算签名,并在请求中包含这个签名。服务端收到请求后,需要校验签名。只有在校验通过的情况下,才会响应客户端请求。
本文档通过 示例代码 演示了客户端签名逻辑的实现。同时也描述了如何在 CDN 中配置请求的鉴权逻辑。
鉴权流程
- 您在 CDN 控制台对加速域名配置 URL 鉴权。CDN 提供了多种鉴权类型的供您选择和配置。每种鉴权类型提供不同的签名算法。
- 客户端发送带签名的请求到加速域名。
- CDN 根据加速域名的 URL 鉴权配置,做以下验证:
- 判断 CDN 计算得到的签名和客户端请求中包含的签名是否一致。判断的逻辑如下:
MD5 值转化成小写进行比较。原因是签名参数在比较时是大小写敏感的。 - 判断请求是否过期。如果满足以下条件,则请求未过期:
CDN 收到请求的时间 <= 请求中包含的时间戳 + 鉴权参数中配置的有效时间。
- 如果验证通过,CDN 响应请求。如果不通过,则拒绝请求,返回 403 响应状态码。
URL 鉴权能够有效防止源站内容被恶意用户盗刷。
说明
- URL 鉴权在 CDN 进行,源站无需改造。
- 开启 URL 鉴权后,客户端的请求都必须包含签名。否则请求会失败。
- 如果鉴权类型是 E 类型,CDN 会在回源请求中包含用户请求中的签名。
- 如果鉴权类型不是 E 类型,CDN 默认不会在回源请求中包含签名。如果源站也启用了 URL 鉴权,回源请求会失败。建议您关闭源站上的 URL 鉴权。
- 对于 A 类型和 D 类型,您可以 提交工单 开启 鉴权参数设置。在该设置中,您可以指定 CDN 在回源请求中包含签名。
鉴权计算器
控制台提供了鉴权计算器,一个便利的小工具。在完成 URL 鉴权的配置后,您可以使用鉴权计算器来:
- 生成鉴权 URL 示例。该 URL 示例除了包含签名,也符合您指定的鉴权类型所定义的 URL 格式。通过发送一个包含该 URL 示例的请求,您可以验证您的 URL 鉴权配置是否符合预期。
- 验证客户端生成的鉴权 URL 示例是否与鉴权计算器生成的相同。
- 验证签名的过期时间是否符合预期。
使用鉴权计算器
- 上点击 鉴权计算器。 鉴权计算器 页面会自动获取加速域名的 URL 鉴权配置。如果您没有配置备密钥,鉴权计算器会自动创建一个供参考,您也可以删除该备密钥。如果您删除了备密钥,在生成的鉴权 URL 中,就不会包含备用鉴权 URL。
- 在 原始 URL 处,输入您站点上任意一个文件的 URL。在您未启用 URL 鉴权时,用户使用该 URL 访问该文件。
- (可选)指定一个 开始时间。默认情况下,开始时间 就是当前时间,用于计算签名的过期时间。
- 点击 生成鉴权,然后查看生成的鉴权 URL 示例以及签名的过期时间。

功能优先级
CDN 提供的一系列访问控制功能有不同的优先级。在 CDN 处理用户请求时,这些功能按优先级对请求生效。参见 访问控制功能的优先级。
操作步骤
- 登录 火山引擎内容分发网络控制台。
- 在左侧导航栏,点击 域名管理。
- 在 域名管理 页面,找到需要配置的域名,点击 管理。
- 定位 URL 鉴权 模块。
- 如果您使用的是旧版域名管理页面,点击 编辑配置,然后在 访问控制 标签页中定位 URL 鉴权 模块。
- 如果您使用的是新版域名管理页面,点击 编辑域名。在页面左侧的树状配置项列表中,定位 功能配置 > 访问控制 > URL 鉴权。如果该模块置灰,点击模块右边的 + 。
关于新旧版域名管理页面的区别,参见 新版域名配置。
- 在 URL 鉴权 模块中,设置 状态 为启用。
- 选择一个 URL 鉴权类型,并进行相应的配置。
- 配置完成后,点击 提交编辑。
签名计算示例代码
客户端请求中包含的签名可以由一个独立的签名服务器提供,也可以由客户端生成。您可以参考以下示例代码中展示的签名算法,在客户端或者签名服务器使用相应的编程语言实现签名计算逻辑。
说明
Python 示例代码要求 Python 3.0。

URL-Auth-for-PHP.txt
3.64KB

URL-Auth-for-Go.txt
4.13KB

URL-Auth-for-Python.txt
3.60KB

URL-Auth-for-Java.txt
6.94KB