在CDN分发的内容默认为公开资源,用户拿到URL后均可访问,为防止站点资源被恶意下载盗用,除了通过Referer防盗链、IP黑白名单等防控方式,您还可以采用URL鉴权,自行配置校验鉴权URL中的加密串和时间戳,更安全有效地保护源站资源。
鉴权逻辑
URL鉴权功能通过阿里云CDN节点与客户资源站点配合,形成了更为安全可靠的源站资源防盗方法。主要由以下几个部分配合:
源站应用服务器:根据鉴权URL生成规则(包括鉴权算法、密钥)生成鉴权URL返回给客户端。
客户端:发起资源请求,并发送鉴权URL给CDN节点进行验证。
CDN节点:对鉴权URL中的鉴权信息(鉴权字符串、时间戳等)进行验证。
CDN客户在源站应用服务器配置鉴权URL的生成规则(包括鉴权算法和密钥)。
假设鉴权URL为:
http://DomainName/timestamp/md5hash/FileName。客户端访问源站应用的页面时,源站应用服务器将会按照鉴权URL的生成规则生成鉴权URL,并且把鉴权URL包含在应用页面上返回给客户端。
客户端使用鉴权URL向CDN节点发起资源请求。
CDN节点对鉴权URL中的鉴权信息(包括鉴权字符串、时间戳等)进行验证,判断请求的合法性。
鉴权失败,拒绝访问请求。
鉴权通过,正常响应合法请求。
说明若CDN节点没有缓存资源,CDN节点回源前,会去掉鉴权URL中的鉴权参数,将鉴权URL还原为原始URL(例如:
http://DomainName/FileName),再使用原始URL生成缓存key或者发起回源请求。您的请求URL经过CDN鉴权后,URL中的特殊字符,例如中文(或其他非 ASCII 字符)会被 编码(encode) 处理。
注意事项
鉴权失败请求的日志记录:配置URL鉴权后,鉴权失败请求仍可访问到CDN节点,但会被节点拒绝并返回403状态码,日志中仍会记录鉴权失败的请求记录。
鉴权失败请求产生的费用:由于URL鉴权功能采用的是自行配置校验鉴权URL中的加密串和时间戳,因此在恶意请求被节点拦截的同时,会产生少量的流量费用,如果客户端使用HTTPS协议访问,还会产生HTTPS请求数费用(因为拦截恶意请求的时候,也同时消耗了节点的处理资源)。
URL 鉴权场景的刷新和预热:
提交的刷新 URL 或预热 URL 应与实际缓存键一致。对于已配置 URL 鉴权的域名,应提交不含鉴权参数的原始 URL(加速域名 + 文件路径)。
若业务查询参数(query string)中包含
/,提交前需将其编码为%2F。
控制台在提交刷新或预热请求前,仅对 URL 进行格式校验,并按用户输入提交,不会自动删除鉴权参数、重新编码业务查询参数或规范化 URL。不要直接提交包含鉴权参数的客户访问 URL,否则可能因与实际缓存键不一致,导致无法命中目标缓存。
以下示例以配置了 F 方式 URL 鉴权的域名为例。示例中的
k和t分别表示该域名配置的签名参数和时间戳参数名称。客户访问 URL:
https://image.example.com/cat.jpg?x-oss-process=image/resize,m_fill,w_390,h_520,limit_1/auto-orient,1/sharpen,100/quality,q_80&k=123456789abcdefg&t=123abc去除鉴权参数后的 URL:删除
k和t,保留业务查询参数。https://image.example.com/cat.jpg?x-oss-process=image/resize,m_fill,w_390,h_520,limit_1/auto-orient,1/sharpen,100/quality,q_80最终刷新/预热 URL:将业务查询参数
x-oss-process值中的/编码为%2F;路径/cat.jpg中的路径分隔符保持不变。https://image.example.com/cat.jpg?x-oss-process=image%2Fresize,m_fill,w_390,h_520,limit_1%2Fauto-orient,1%2Fsharpen,100%2Fquality,q_80
有关刷新和预热的具体操作,请参见刷新和预热资源。
配置鉴权URL并开启鉴权
请确保您已经在您的源站应用服务器配置了鉴权URL的生成规则(包括鉴权算法、密钥)。
CDN配置的URL鉴权逻辑必须与您的源站应用服务器的URL鉴权逻辑保持一致。
登录CDN控制台。
在左侧导航栏,单击域名管理。
在域名管理页面,找到目标域名,单击操作列的管理。
在指定域名的左侧导航栏,单击访问控制。
单击URL鉴权页签。
在鉴权URL设置区域,单击修改配置。
打开URL鉴权开关,配置URL鉴权信息。
参数
说明
鉴权类型
主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方式的时候有效。
规则条件
规则条件能够对用户请求中携带的各种参数信息进行识别,以此来决定某个配置是否对该请求生效。
重要引用规则条件时,按所关联规则条件的优先级匹配,而非按功能自身的配置顺序匹配。
不使用:不使用规则条件。
若需新增或编辑规则条件,请在规则引擎中进行管理。
单击确定。
验证鉴权URL正确性
为保证服务器正确实现了鉴权逻辑,配置鉴权URL后,建议您在CDN控制台生成对应的鉴权URL,校验鉴权URL的正确性。
在鉴权URL生成工具区域,配置原始URL(未编码)和鉴权信息。
参数
说明
原始URL(未编码)
输入完整的原始URL地址,例如:
https://www.aliyun.com。生成鉴权URL时,工具将自动编码原始URL。鉴权类型
按照您在配置鉴权URL并开启鉴权的配置,选择URL鉴权类型。
鉴权KEY
按照您在配置鉴权URL并开启鉴权的配置,输入您配置的主KEY或备KEY。
鉴权URL有效时长
按照您在配置鉴权URL并开启鉴权的配置,输入URL鉴权的有效时长,单位为秒。
单击开始生成,即可获得鉴权URL和Timestamp。
关闭URL鉴权
如果CDN的URL鉴权功能已经关闭,但是客户端发起的请求URL依然携带鉴权参数,将导致CDN无法把客户端发起的请求URL(带鉴权参数)还原为原始URL,最终所有请求都无法命中缓存,均会透传回源站,导致源站的流量大涨,同时也会增加源站的流量费用。因此,如果您需要停止使用URL鉴权,需同时关闭应用服务器和CDN的URL鉴权功能。
在CDN控制台的鉴权URL设置区域,单击修改配置,关闭URL鉴权开关。
在您的应用服务器中去掉请求URL的鉴权参数。