CDN(内容分发网络)是一种通过在全球范围内部署大量节点,将内容缓存到离用户最近的节点,从而实现快速、稳定的内容传输的技术,在CDN上分发的内容默认为公开资源,用户拿到URL后均可进行访问,为了防止恶意用户盗刷资源,除了通过referer黑白名单、IP黑白名单、IP访问限频等访问控制策略外,还可以通过设置高级时间戳鉴权来进行盗刷防护。
CDN鉴权配置步骤
1、登录CDN控制台:需要登录到CDN服务提供商的控制台。
2、选择域名管理:在控制台菜单栏里选择“域名管理”,并单击目标域名右侧的“管理”按钮,进入域名配置页面。
3、访问控制中的鉴权配置:在域名配置页面中,找到“访问控制”选项,并点击“鉴权配置”,默认情况下,鉴权配置为关闭状态。
4、修改配置:点击“修改配置”按钮,进入鉴权配置页面。
5、选择鉴权模式:CDN提供了多种鉴权签名计算方式供您选择,如TypeA、TypeB、TypeC、TypeD等,每种模式的具体区别和URL格式如下表所示:
类型 | URL格式 |
TypeA | http://DomainName/Filename?sign=timestamp-rand-uid-md5hash |
TypeB | http://DomainName/timestamp/md5hash/FileName |
TypeC | http://DomainName/md5hash/timestamp/FileName |
TypeD | http://DomainName/FileName?sign=md5hash&t=timestamp |
6、设置参数:根据业务需求填写鉴权密钥、签名参数、有效时间等参数,有效时间不要设置过短,系统会通过请求路径中的时间戳值加上配置的有效时间与当前时间进行对比,判定请求是否过期。
7、配置鉴权对象:鉴权的对象可以是所有文件,也可以是指定后缀的文件鉴权或不鉴权。
8、保存设置:完成上述配置后,点击“保存”按钮,即可开启URL鉴权功能。
示例代码
以下是一个简单的Python示例代码,用于生成不同鉴权模式下的URL:
import requests import json import sys import time import hashlib def generate_url(category, ts=None): url = 'http://www.test.com' # 测试域名 path = '/1.txt' # 访问路径 suffix = '?a=1&b=2' # URL参数 key = 'abc123456789' # 鉴权密钥 now = int(time.mktime(time.strptime(ts, "%Y%m%d%H%M%S")) if ts else time.time() # 如果输入了时间,用输入ts,否则用当前ts sign_key = 'key' # url签名字段 time_key = 't' # url时间字段 ttl_format = 10 # 时间进制,10或16,只有typeD支持 if category == 'A': # Type A ts = now rand_str = '123abc' sign = hashlib.md5('%s-%s-%s-%s-%s' % (path, ts, rand_str, 0, key)).hexdigest() request_url = '%s%s?%s=%s' % (url, path, sign_key, '%s-%s-%s-%s' % (ts, rand_str, 0, sign)) print(request_url) elif category == 'B': # Type B ts = time.strftime('%Y%m%d%H%M', time.localtime(now)) sign = hashlib.md5('%s%s%s' % (key, ts, path)).hexdigest() request_url = '%s/%s/%s%s%s' % (url, ts, sign, path, suffix) print(request_url) elif category == 'C': # Type C ts = hex(now)[2:] sign = hashlib.md5('%s%s%s' % (key, path, ts)).hexdigest() request_url = '%s/%s/%s%s%s' % (url, sign, ts, path, suffix) print(request_url) elif category == 'D': # Type D ts = now if ttl_format == 10 else hex(now)[2:] sign = hashlib.md5('%s%s%s' % (key, path, ts)).hexdigest() request_url = '%s%s?%s=%s&%s=%s' % (url, path, sign_key, sign, time_key, ts) print(request_url) if __name__ == '__main__': # 示例调用 generate_url('A') generate_url('B') generate_url('C') generate_url('D')
注意事项
配置URL鉴权后,客户端在发起请求时需要按照配置计算签名并携带至服务端,CDN节点进行服务端校验,校验通过后才继续放行。
如果CDN上的URL鉴权功能已经关闭了,但是客户端发起的请求URL里面依然携带鉴权参数的话,就会导致CDN无法把客户端发起的请求URL(带鉴权参数)还原为原始URL,最终所有请求都无法命中缓存,均会透传回源站,导致源站的流量大涨,同时也会增加源站的流量费用,如果需要停止使用URL鉴权,需同时关闭应用服务器和CDN的URL鉴权功能。
远程鉴权仅提供2023年11月8日前已使用远程鉴权功能的用户可用,如控制台不可见此功能可前往EdgeOne接入。
常见问题解答(FAQs)
Q1: 如何验证CDN鉴权配置是否正确?
A1: 可以通过以下步骤验证CDN鉴权配置的正确性:
1、在CDN控制台生成对应的鉴权URL和Timestamp。
2、使用生成的鉴权URL发起请求,观察响应状态码,如果返回200状态码,则说明鉴权配置正确;如果返回403状态码或其他错误信息,则需要检查鉴权配置是否正确。
Q2: 如果需要停止使用URL鉴权功能,应该如何操作?
A2: 如果需要停止使用URL鉴权功能,需要同时关闭应用服务器和CDN的URL鉴权功能,具体步骤如下:
1、在CDN控制台的鉴权URL设置区域,单击“修改配置”,关闭URL鉴权开关。
2、在应用服务器中去掉请求URL的鉴权参数。
到此,以上就是小编对于“cdn鉴权配置”的问题就介绍到这了,希望介绍的几点解答对大家有用,有任何问题和不懂的,欢迎各位朋友在评论区讨论,给我留言。
原创文章,作者:未希,如若转载,请注明出处:https://www.kdun.com/ask/1372912.html
本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。
发表回复