溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

基于Python怎么實(shí)現(xiàn)云服務(wù)器的CDN域名遠(yuǎn)程鑒權(quán)配置

發(fā)布時(shí)間:2022-05-16 14:18:06 來源:億速云 閱讀:161 作者:iii 欄目:開發(fā)技術(shù)

今天小編給大家分享一下基于Python怎么實(shí)現(xiàn)云服務(wù)器CDN域名遠(yuǎn)程鑒權(quán)配置的相關(guān)知識(shí)點(diǎn),內(nèi)容詳細(xì),邏輯清晰,相信大部分人都還太了解這方面的知識(shí),所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

實(shí)戰(zhàn)場(chǎng)景

在項(xiàng)目實(shí)戰(zhàn)中,會(huì)碰到一種特定的運(yùn)維場(chǎng)景,對(duì)CDN訪問進(jìn)行限制,一般手段是開啟 referer 防盜鏈,開啟 IP黑白名單,開啟UA黑白名單。

基于Python怎么實(shí)現(xiàn)云服務(wù)器的CDN域名遠(yuǎn)程鑒權(quán)配置

實(shí)現(xiàn)目標(biāo):

  • 請(qǐng)求CDN資源調(diào)用我們的鑒權(quán)服務(wù)器

  • 鑒權(quán)服務(wù)器獲取請(qǐng)求信息,并保存到日志中

  • 分別返回鑒權(quán)成功,鑒權(quán)失敗

開啟遠(yuǎn)程鑒權(quán)

在遠(yuǎn)程鑒權(quán)頁面打開【開關(guān)】之后,出現(xiàn)如下配置界面,這里相關(guān)細(xì)節(jié)描述如下:

  • 鑒權(quán)服務(wù)器地址:我們自己的服務(wù)器,地址可訪問,可以是域名也可以是IP地址;

  • 請(qǐng)求方法:支持 GET,POST,HEAD 三種請(qǐng)求;

  • 鑒權(quán)文件類型:多個(gè)文件類型用 | 分隔,例如 mp4|flv;

  • 保留參數(shù)設(shè)置:控制用戶請(qǐng)求 URL 中需要鑒權(quán)的參數(shù),用 | 分隔;

  • 自定義參數(shù):可以自定義參數(shù),可以使用CDN控制臺(tái)預(yù)設(shè)的變量,多個(gè)參數(shù)用 | 分隔,例如 token=$arg_token|vendor=ali_cdn;

  • 保留請(qǐng)求頭設(shè)置:控制用戶請(qǐng)求頭中需要鑒權(quán)的參數(shù),可以保留所有參數(shù),也可以保留指定參數(shù);

  • 添加自定義參數(shù):給請(qǐng)求頭添加自定義參數(shù);

  • 鑒權(quán)狀態(tài)碼:成功200,失敗 403;

  • 鑒權(quán)超時(shí)時(shí)長(zhǎng):?jiǎn)挝粸楹撩?,最長(zhǎng)時(shí)長(zhǎng)可以設(shè)置為3000;

基于Python怎么實(shí)現(xiàn)云服務(wù)器的CDN域名遠(yuǎn)程鑒權(quán)配置

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

基于Python怎么實(shí)現(xiàn)云服務(wù)器的CDN域名遠(yuǎn)程鑒權(quán)配置

開啟該配置之后,再次訪問靜態(tài)資源,就會(huì)出現(xiàn) 403 Forbidden

基于Python怎么實(shí)現(xiàn)云服務(wù)器的CDN域名遠(yuǎn)程鑒權(quán)配置

這里需要注意,由于測(cè)試的是 m3u8 文件,所以訪問該文件的時(shí)候,如果沒有被禁止,會(huì)自動(dòng)下載。

Python 端權(quán)限驗(yàn)證

以下代碼基于 Flask 編寫,主要將POST請(qǐng)求數(shù)據(jù)和Header請(qǐng)求頭保存到文件中。 日志文件,我們使用 logging 模塊寫入到 new.log 文件中。

# 導(dǎo)入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')
# 實(shí)例化,可視為固定格式
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請(qǐng)求")
        arges = request.form
        print("參數(shù)")
        logging.info(arges)
        print(request)
        print("請(qǐng)求頭")
        headers = request.headers
        print(headers)
        logging.info(headers)
        print("請(qǐng)求數(shù)據(jù)")
        logging.info(request.data)
        return "login success", 200 # 403
    if request.method == "POST":
        print("POST請(qǐng)求")
        arges = request.form
        print(request)
        headers = request.headers
        print("參數(shù)")
        logging.info(arges)
        print("請(qǐng)求頭")
        logging.info(headers)
        print("請(qǐng)求數(shù)據(jù)")
        logging.info(request.data)
        return "login success", 200 # 403
if __name__ == '__main__':
    # app.run(host, port, debug, options)
    # 默認(rèn)值:host="127.0.0.1", port=5000, debug=False
    app.run(host="0.0.0.0", port=5000)

此時(shí),當(dāng)你再次訪問CDN資源時(shí),會(huì)自動(dòng)回調(diào)你的服務(wù)器進(jìn)行鑒權(quán)操作,上述代碼請(qǐng)求成功之后,返回狀態(tài)碼為 200,接下來CDN資源可以訪問,如果返回403,表示被禁用。

基于Python怎么實(shí)現(xiàn)云服務(wù)器的CDN域名遠(yuǎn)程鑒權(quán)配置

驗(yàn)證邏輯

服務(wù)端驗(yàn)證可以基于 referer + ua + ip 進(jìn)行驗(yàn)證,為了保證效率,可以使用 redis 緩存數(shù)據(jù)庫進(jìn)行配置。

以上就是“基于Python怎么實(shí)現(xiàn)云服務(wù)器的CDN域名遠(yuǎn)程鑒權(quán)配置”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會(huì)為大家更新不同的知識(shí),如果還想學(xué)習(xí)更多的知識(shí),請(qǐng)關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI