You need to enable JavaScript to run this app.
导航
URL 鉴权概述
最近更新时间:2024.12.12 10:23:28首次发布时间:2022.02.09 10:17:37

本文档介绍如何在火山引擎内容分发网络(CDN)中配置 URL 鉴权。

背景

CDN 提供了 "Referer 黑白名单","Origin 黑白名单" 和 "IP 黑白名单" 对用户请求进行过滤。但是在某些情况下,Referer, Origin 和 IP 可以被伪造,容易造成站点资源被恶意盗用。如果您对于站点内容的安全性有很高的要求,可以采用 URL 鉴权。

URL 鉴权工作原理

客户端在发送请求至服务端时,按照您设定的签名规则计算签名,并在请求中包含这个签名。服务端收到请求后,需要校验签名。只有在校验通过的情况下,才会响应客户端请求。

本文档通过 示例代码 演示了客户端签名逻辑的实现。同时也描述了如何在 CDN 中配置请求的鉴权逻辑。

鉴权流程

  1. 您在 CDN 控制台对加速域名配置 URL 鉴权。CDN 提供了多种鉴权类型的供您选择和配置。每种鉴权类型提供不同的签名算法。
  2. 客户端发送带签名的请求到加速域名。
  3. CDN 根据加速域名的 URL 鉴权配置,做以下验证:
    • 判断 CDN 计算得到的签名和客户端请求中包含的签名是否一致。判断的逻辑如下:
          MD5 值转化成小写进行比较。原因是签名参数在比较时是大小写敏感的。
    • 判断请求是否过期。如果满足以下条件,则请求未过期:
          CDN 收到请求的时间 <= 请求中包含的时间戳 + 鉴权参数中配置的有效时间。
  4. 如果验证通过,CDN 响应请求。如果不通过,则拒绝请求,返回 403 响应状态码。

URL 鉴权能够有效防止源站内容被恶意用户盗刷。

说明

  • URL 鉴权在 CDN 进行,源站无需改造。
  • 如果 CDN 通过了验证,在回源请求中不会包含签名参数。
  • 开启 URL 鉴权后,客户端的请求都必须包含签名。否则请求会失败。

鉴权计算器

控制台提供了鉴权计算器,一个便利的小工具。在完成 URL 鉴权的配置后,您可以使用鉴权计算器来:

  • 生成鉴权 URL 示例。该 URL 示例除了包含签名,也符合您指定的鉴权类型所定义的 URL 格式。通过发送一个包含该 URL 示例的请求,您可以验证您的 URL 鉴权配置是否符合预期。

  • 验证客户端生成的鉴权 URL 示例是否与鉴权计算器生成的相同。

  • 验证签名的过期时间是否符合预期。

使用鉴权计算器

  1. 上点击 鉴权计算器鉴权计算器 页面会自动获取加速域名的 URL 鉴权配置。如果您没有配置备密钥,鉴权计算器会自动创建一个供参考,您也可以删除该备密钥。如果您删除了备密钥,在生成的鉴权 URL 中,就不会包含备用鉴权 URL。

  2. 原始 URL 处,输入您站点上任意一个文件的 URL。在您未启用 URL 鉴权时,用户使用该 URL 访问该文件。

  3. (可选)指定一个 开始时间。默认情况下,开始时间 就是当前时间,用于计算签名的过期时间。

  4. 点击 生成鉴权,然后查看生成的鉴权 URL 示例以及签名的过期时间。

注意事项

  • 如果鉴权类型是 E 类型,CDN 会在回源请求中包含用户请求中的签名。
  • 如果鉴权类型不是 E 类型,CDN 默认不会在回源请求中包含签名。如果源站也启用了 URL 鉴权,回源请求会失败。建议您关闭源站上的 URL 鉴权。
    • 对于 A 类型和 D 类型,您可以在 保留鉴权参数 配置中指定 CDN 在回源请求中包含签名。

功能优先级

CDN 提供的一系列访问控制功能有不同的优先级。在 CDN 处理用户请求时,这些功能按优先级对请求生效。参见 访问控制功能的优先级

操作步骤

  1. 登录 火山引擎内容分发网络控制台
  2. 在左侧导航栏,点击 域名管理
  3. 域名管理 页面,找到需要配置的域名,点击 管理
  4. 在域名页面上,点击 访问控制 页签。
  5. 在页面右上方,点击 编辑配置
  6. URL 鉴权 下方,设置 状态 为启用。
  7. 选择一个 URL 鉴权类型,并进行相应的配置。
  8. 在页面右上方,点击 提交编辑

签名计算示例代码

客户端请求中包含的签名可以由一个独立的签名服务器提供,也可以由客户端生成。您可以参考以下示例代码中展示的签名算法,在客户端或者签名服务器使用相应的编程语言实现签名计算逻辑。

说明

Python 示例代码要求 Python 3.0。

URL-Auth_go.txt
3.57KB
URL-Auth_java.txt
6.13KB
URL-Auth_php.txt
3.28KB
URL-Auth_python.txt
3.21KB