基於 Python實現雲服務器的CDN域名遠程鑒權配置
實戰場景
在項目實戰中,會碰到一種特定的運維場景,對CDN訪問進行限制,一般手段是開啟 referer 防盜鏈,開啟 IP黑白名單,開啟UA黑白名單,本篇博客為大傢展示的是通過我們自己的服務器,然後實現遠程鑒權,進行更加細致的權限判定。
實現目標:
- 請求CDN資源調用我們的鑒權服務器
- 鑒權服務器獲取請求信息,並保存到日志中
- 分別返回鑒權成功,鑒權失敗
開啟遠程鑒權
在遠程鑒權頁面打開【開關】之後,出現如下配置界面,這裡相關細節描述如下:
鑒權服務器地址
:我們自己的服務器,地址可訪問,可以是域名也可以是IP地址;請求方法
:支持 GET,POST,HEAD 三種請求;鑒權文件類型
:多個文件類型用|
分隔,例如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 鑒權配置內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- 使用flask如何獲取post請求參數
- python如何構建mock接口服務
- 利用python寫api接口實戰指南
- Python3+Flask安裝使用教程詳解
- python的簡單web框架flask快速實現詳解