相关文章推荐
咆哮的生菜  ·  CDN ...·  2 月前    · 
咆哮的生菜  ·  CDN原理-阿里云·  2 月前    · 

CDN 分发的内容默认为公开资源,用户拿到URL后均可访问,为防止站点资源被恶意下载盗用,除了通过Referer防盗链、IP黑白名单等防控方式,您还可以采用URL鉴权,自行配置校验鉴权URL中的加密串和时间戳,更安全有效地保护源站资源。

鉴权逻辑

URL鉴权功能通过阿里云 CDN 节点与客户资源站点配合,形成了更为安全可靠的源站资源防盗方法。主要由以下几个部分配合:

  • 源站应用服务器:根据鉴权URL生成规则(包括鉴权算法、密钥)生成鉴权URL返回给客户端。

  • 客户端:发起资源请求,并发送鉴权URL给 CDN 节点进行验证。

  • CDN 节点:对鉴权URL中的鉴权信息(鉴权字符串、时间戳等)进行验证。

image
  1. CDN 客户在源站应用服务器配置鉴权URL的生成规则(包括鉴权算法和密钥)。

    假设鉴权URL为: http://DomainName/timestamp/md5hash/FileName

  2. 客户端访问源站应用的页面时,源站应用服务器将会按照鉴权URL的生成规则生成鉴权URL,并且把鉴权URL包含在应用页面上返回给客户端(图中②和③)。

  3. 客户端使用鉴权URL向 CDN 节点发起资源请求(图中④)。

  4. CDN 节点对鉴权URL中的鉴权信息(包括鉴权字符串、时间戳等)进行验证,判断请求的合法性。

    • 鉴权失败,拒绝访问请求。

    • 鉴权通过,正常响应合法请求。

      说明
      • CDN 节点没有缓存资源, CDN 节点回源前,会去掉鉴权URL中的鉴权参数,将鉴权URL还原为原始URL(例如: http://DomainName/FileName ),再使用原始URL生成缓存key或者发起回源请求。

      • 您的请求URL经过 CDN 鉴权后,URL中的特殊字符,例如 = + 等会被转义。

注意事项

  • 配置URL鉴权后,鉴权失败请求仍可访问到 CDN 节点,但会被 CDN 节点拒绝并返回403状态码, CDN 日志中仍会记录鉴权失败的请求记录。

  • 由于URL鉴权功能采用的是自行配置校验鉴权URL中的加密串和时间戳,因此在恶意请求被 CDN 节点拦截的同时,会产生少量的流量费用,如果客户端使用HTTPS协议访问,还会产生HTTPS请求数费用(因为拦截恶意请求的时候,也同时消耗了 CDN 节点的处理资源)。

配置鉴权URL并开启鉴权

重要
  • 请确保您已经在您的源站应用服务器配置了鉴权URL的生成规则(包括鉴权算法、密钥)。

  • CDN 配置的URL鉴权逻辑必须与您的源站应用服务器的URL鉴权逻辑保持一致。

  1. 登录 CDN控制台

  2. 在左侧导航栏,单击 域名管理

  3. 域名管理 页面,找到目标域名,单击 操作 列的 管理

  4. 在指定域名的左侧导航栏,单击 访问控制

  5. 单击 URL鉴权 页签。

  6. 鉴权URL设置 区域,单击 修改配置

  7. 打开 URL鉴权 开关,配置URL鉴权信息。

    image

    参数

    说明

    鉴权类型

    阿里云CDN提供了4种鉴权签名计算方式。您可以根据访问加密URL格式,选择合适的鉴权方式,实现对源站资源的有效保护。URL鉴权类型如下:

    说明

    URL鉴权错误会返回403报错:

    • MD5计算类错误

      例如: X-Tengine-Error:denied by req auth: invalid md5hash=de7bfdc915ced05e17380a149bd760be

    • 时间类报错

      例如: X-Tengine-Error:denied by req auth: expired timestamp=1439469547

    主KEY

    输入鉴权方式对应的主用密码。由6~128个字符组成,支持大写字母、小写字母、数字。

    备KEY

    输入鉴权方式对应的备用密码。由6~128个字符组成,支持大写字母、小写字母、数字。主、备KEY至少要填写一个。

    鉴权URL有效时长

    CDN配置的鉴权URL有效时长,用户可在(timestamp+CDN上鉴权URL有效时长)时间区间内访问CDN,超出该区间,鉴权失效。

    • 单位:秒

    • 取值范围:1~31536000

    • 默认值:1800(30分钟)

    • 示例: 例如签算服务器生成鉴权URL的时间(timestamp)为2020-08-15 15:00:00(UTC+8),CDN上鉴权URL有效时长为1800秒,则鉴权URL失效时间为2020-08-15 15:30:00(UTC+8)。

    签名参数

    通过设置签名参数,可以自定义签名参数名称。仅在鉴权类型设置为F方式的时候有效。

    时间戳参数

    通过设置时间戳参数,可以自定义时间戳参数名称。仅在鉴权类型设置为F方式的时候有效。

    时间戳格式

    设置时间戳格式,支持十进制(Unix时间戳)和十六进制(Unix时间戳)。仅在鉴权类型设置为F方式的时候有效。

    URL编码

    URL编码开关,默认关闭,开启的情况下将会对用户请求URL做URL编码处理。仅在鉴权类型设置为F方式的时候有效。

    规则条件

    规则条件能够对用户请求中携带的各种参数信息进行识别,以此来决定某个配置是否对该请求生效。

    • 不使用 :不使用规则条件。

    • 选择已配置的规则引擎,新增或修改规则引擎请参见 规则引擎

  8. 单击 确定

验证鉴权URL正确性

为保证服务器正确实现了鉴权逻辑,配置鉴权URL后,建议您在CDN控制台生成对应的鉴权URL,校验鉴权URL的正确性。

  1. 生成鉴权URL 区域,配置 原始URL 和鉴权信息。

    image

    参数

    说明

    原始URL

    输入完整的原始URL地址,例如: https://www.aliyun.com

    鉴权类型

    按照您在 配置鉴权URL并开启鉴权 的配置,选择URL鉴权类型。

    鉴权KEY

    按照您在 配置鉴权URL并开启鉴权 的配置,输入您配置的 主KEY 备KEY

    鉴权URL有效时长

    按照您在 配置鉴权URL并开启鉴权 的配置,输入URL鉴权的有效时长,单位为秒。

  2. 单击 开始生成 ,即可获得 鉴权URL Timestamp

    URL鉴权

关闭URL鉴权

重要

如果 CDN 上的URL鉴权功能已经关闭了,但是客户端发起的请求URL里面依然携带鉴权参数的话,就会导致 CDN 无法把客户端发起的请求URL(带鉴权参数)还原为原始URL,最终所有请求都无法命中缓存,均会透传回源站,导致源站的流量大涨,同时也会增加源站的流量费用。因此,如果您需要停止使用URL鉴权,需同时关闭应用服务器和 CDN 的URL鉴权功能。

image
  1. CDN控制台 鉴权URL设置 区域,单击 修改配置 ,关闭URL鉴权开关。

  2. 在您的应用服务器中去掉请求URL的鉴权参数。

相关API