基于Python实现云服务器的CDN域名远程鉴权配置

周末不加班
周末不加班
发布时间:2026-10-15 | 5人浏览过
原创

本文介绍如何利用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鉴权配置内容请搜索本站以前的文章或继续浏览下面的相关文章,希望大家以后多多支持本站!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表