基于 Python實現(xiàn)云服務器的CDN域名遠程鑒權配置
實戰(zhàn)場景
在項目實戰(zhàn)中,會碰到一種特定的運維場景,對CDN訪問進行限制,一般手段是開啟 referer 防盜鏈,開啟 IP黑白名單,開啟UA黑白名單,本篇博客為大家展示的是通過我們自己的服務器,然后實現(xiàn)遠程鑒權,進行更加細致的權限判定。

實現(xiàn)目標:
- 請求CDN資源調用我們的鑒權服務器
- 鑒權服務器獲取請求信息,并保存到日志中
- 分別返回鑒權成功,鑒權失敗
開啟遠程鑒權
在遠程鑒權頁面打開【開關】之后,出現(xiàn)如下配置界面,這里相關細節(jié)描述如下:
鑒權服務器地址:我們自己的服務器,地址可訪問,可以是域名也可以是IP地址;請求方法:支持 GET,POST,HEAD 三種請求;鑒權文件類型:多個文件類型用|分隔,例如mp4|flv;保留參數設置:控制用戶請求 URL 中需要鑒權的參數,用|分隔;自定義參數:可以自定義參數,可以使用CDN控制臺預設的變量,多個參數用|分隔,例如token=$arg_token|vendor=ali_cdn;保留請求頭設置:控制用戶請求頭中需要鑒權的參數,可以保留所有參數,也可以保留指定參數;添加自定義參數:給請求頭添加自定義參數;鑒權狀態(tài)碼:成功200,失敗 403;鑒權超時時長:單位為毫秒,最長時長可以設置為3000;

參考上述說明配置完畢,得到如下界面,本案例中僅限制了 m3u8 類型的文件,后續(xù)我們根據實際情況進行修改。

開啟該配置之后,再次訪問靜態(tài)資源,就會出現(xiàn) 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資源時,會自動回調你的服務器進行鑒權操作,上述代碼請求成功之后,返回狀態(tài)碼為 200,接下來CDN資源可以訪問,如果返回403,表示被禁用。

驗證邏輯
服務端驗證可以基于 referer + ua + ip 進行驗證,為了保證效率,可以使用 redis 緩存數據庫進行配置。
到此這篇關于基于 Python實現(xiàn)云服務器的CDN域名遠程鑒權配置的文章就介紹到這了,更多相關CDN 鑒權配置內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
python列表插入append(), extend(), insert()用法詳解
在本篇文章里小編給大家整理了關于python列表插入append(), extend(), insert()用法以及相關知識點,有需要的朋友們參考下。2019-09-09
Python+SeaTable實現(xiàn)生成條形碼圖片并寫入表格
不管是錄入信息時需要用掃碼器掃碼錄入,還是有別的生成條形碼的需要,這在?SeaTable?表格中用?Python?腳本就可以輕松實現(xiàn),本文就來為大家詳細講解一下2022-07-07
python報錯TypeError: Input z must be
大家好,本篇文章主要講的是python報錯TypeError: Input z must be 2D, not 3D的解決方法,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下2021-12-12
用Python刪除本地目錄下某一時間點之前創(chuàng)建的所有文件的實例
下面小編就為大家分享一篇用Python刪除本地目錄下某一時間點之前創(chuàng)建的所有文件的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2017-12-12

