基于Python实现云服务器的CDN域名远程鉴权配置
本文介绍如何利用Python Flask搭建远程鉴权服务器,实现CDN资源的精细化访问控制。通过配置CDN控制台开启远程鉴权,指定服务器地址、请求方法及参数,结合Python代码接收请求并记录日志,最终返回200或403状态码以控制资源访问。该方法可替代传统的Referer或IP黑白名单,提供更灵活的权限判定机制。
实战场景
在项目实际运维中,常需对CDN访问进行严格限制。常规手段包括启用Referer防盗链、IP黑白名单及UA黑白名单。本文旨在展示如何通过自建服务器实现远程鉴权,从而执行更细致的权限判定逻辑。

实现目标:
- 当用户请求CDN资源时,CDN会调用我们的鉴权服务器进行验证。
- 鉴权服务器接收请求信息,并将其记录到日志文件中。
- 根据验证结果,分别返回鉴权成功或失败的响应。
开启远程鉴权
在远程鉴权页面打开【开关】后,将显示如下配置界面,具体配置细节说明如下:
鉴权服务器地址:指定我们自己的服务器地址,该地址需可访问,支持域名或IP形式;请求方法:支持GET、POST及HEAD三种HTTP请求方法;鉴权文件类型:指定需要鉴权的文件类型,多个类型之间使用|分隔,例如mp4|flv;保留参数设置:配置用户请求URL中需要参与鉴权的参数,多个参数间用|分隔;自定义参数:支持自定义参数,可引用CDN控制台预设的变量,多个参数间用|分隔,例如token=$arg_token|vendor=ali_cdn;保留请求头设置:配置用户请求头中需要参与鉴权的参数,可选择保留所有参数或仅保留指定参数;添加自定义参数:允许向请求头中添加自定义参数;鉴权状态码:定义鉴权状态码,成功返回200,失败返回403;鉴权超时时长:设置鉴权超时时长,单位为毫秒,最大可设置为3000;

参考上述说明完成配置后,界面显示如下。本案例中仅限制了m3u8类型的文件,后续可根据实际需求进行调整。

启用该配置后,再次访问静态资源时,若未通过鉴权,将返回403 Forbidden错误。

需注意,由于测试对象为m3u8文件,若访问未被禁止,浏览器会自动触发下载操作。
Python 端权限验证
以下代码基于Flask框架编写,主要功能是将POST请求的数据及Header请求头保存至文件。日志文件使用logging模块写入到new.log文件中。
# 导入Flask类
from flask import Flask
from flask import request
from flask import render_template
import logging
import requests
import time
import random
import base64
logging.basicConfig(level=logging.DEBUG,
filename='./new.log',
filemode='a',
format='%(asctime)s - %(pathname)s[line:%(lineno)d] - %(levelname)s: %(message)s')
# 实例化,可视为固定格式
app = Flask(__name__)
@app.route('/auth', methods=['GET', 'POST','HEAD'])
def auth():
if request.method == 'GET':
args = request.args
return "hello"
if request.method == 'HEAD':
print("HEAD请求")
arges = request.form
print("参数")
logging.info(arges)
print(request)
print("请求头")
headers = request.headers
print(headers)
logging.info(headers)
print("请求数据")
logging.info(request.data)
return "login success", 200 # 403
if request.method == "POST":
print("POST请求")
arges = request.form
print(request)
headers = request.headers
print("参数")
logging.info(arges)
print("请求头")
logging.info(headers)
print("请求数据")
logging.info(request.data)
return "login success", 200 # 403
if __name__ == '__main__':
# app.run(host, port, debug, options)
# 默认值:host="127.0.0.1", port=5000, debug=False
app.run(host="0.0.0.0", port=5000)配置生效后,再次访问CDN资源时,系统会自动回调您的服务器进行鉴权操作。上述代码在请求成功后返回状态码200,此时CDN资源可正常访问;若返回403,则表示访问被禁用。

验证逻辑
服务端验证可基于Referer、UA及IP进行综合判断。为提高处理效率,建议配置Redis缓存数据库以存储相关配置信息。
到此这篇关于基于Python实现云服务器CDN域名远程鉴权配置的文章就介绍到这了,更多相关CDN鉴权配置内容请搜索本站以前的文章或继续浏览下面的相关文章,希望大家以后多多支持本站!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













