国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

Django框架下的用戶鑒權(quán)機制分析與研究

2023-11-30 04:55:18張小梅何菊佘侃侃戴彩艷
無線互聯(lián)科技 2023年18期
關鍵詞:身份驗證

張小梅 何菊 佘侃侃 戴彩艷

基金項目:國家自然科學基金青年基金項目;項目名稱:名老中醫(yī)甲狀腺疾病辨治規(guī)律挖掘策略及方法研究;項目編號:No.82004498。南京中醫(yī)藥大學校自然科學基金青年基金項目;項目名稱:基于衰減系數(shù)的動態(tài)蛋白質(zhì)網(wǎng)絡建模及研究;項目編號:No.NZY61906100。

作者簡介:張小梅(2000— ),女,貴州畢節(jié)人,本科生;研究方向:計算機網(wǎng)絡與應用。

*通信作者:何菊(1979— ),女,江蘇常州人,講師,博士研究生;研究方向:中醫(yī)藥人工智能與大數(shù)據(jù)分析。

摘要:用戶鑒權(quán)是Web應用中保障數(shù)據(jù)安全性的重要組成部分,主要作用是確認Web應用程序中每個用戶的身份,以便限制用戶對資源的訪問和操作。文章從用戶鑒權(quán)的生命周期、主要技術(shù)原理切入,結(jié)合Django框架初級的用戶鑒權(quán)機制即中間件、裝飾器的解讀,由淺入深地分析了用戶鑒權(quán)機制的重要性以及技術(shù)實現(xiàn)的多樣性,讓讀者從原理上了解基于用戶鑒權(quán)實現(xiàn)的網(wǎng)絡安全設計常識,并且能從Django的封裝過程中更好地體會用戶鑒權(quán)邏輯的設計。

關鍵詞:用戶鑒權(quán);Django框架;身份驗證

中圖分類號:TN915.04中圖分類號? 文獻標志碼:A文獻標志碼

0? 引言

用戶鑒權(quán)是指驗證用戶身份以限制用戶對資源的正確訪問與操作,是應用程序中保護用戶隱私的重要組成部分。通常,用戶鑒權(quán)機制包括通過特殊的方式驗證用戶身份以及設計權(quán)限級別來限制用戶訪問或操作兩部分,實現(xiàn)系統(tǒng)的安全性和數(shù)據(jù)的保密性。本文從用戶鑒權(quán)的生命周期引入,分析實現(xiàn)用戶鑒權(quán)的步驟原理;再深入介紹主流的鑒權(quán)機制,簡單說明不同機制的優(yōu)缺點;最后以Django框架為例,分析用戶認證的兩種封裝思路——中間件和裝飾器,完整地解讀用戶鑒權(quán)是什么以及多樣的實現(xiàn)思路。

1? 用戶鑒權(quán)的生命周期

基于用戶登錄才能使用完整服務的網(wǎng)站具有完整的用戶鑒權(quán)機制,系統(tǒng)產(chǎn)生的數(shù)據(jù)需要從用戶身份的維度進行維護和管理,用戶鑒權(quán)需要經(jīng)過5個步驟。

1.1? 用戶提交身份驗證憑證

網(wǎng)站的注冊登錄頁面是用戶鑒權(quán)機制的開始,常見的憑證方式有用戶名密碼驗證、第三方認證(如登錄某Web系統(tǒng)時選擇使用Google賬號登錄)和單點登錄(用戶在一個Web應用中登錄后,可以自動登錄到另一個Web應用中)。

1.2? 服務器驗證憑證的有效性

通俗來說,這個階段是對用戶提交的信息進行校驗。比對用戶名、密碼是否與數(shù)據(jù)庫內(nèi)存儲的一致,或者通過外部接口實現(xiàn)的第三方認證、單點登錄信息是否有效。如果校驗不通過,將返回錯誤提示信息給前端,如果驗證通過,進入用戶機制驗證的下一個階段。

1.3? 服務器校驗成功

用戶身份驗證成功,服務器將會生成一個唯一的標識符代表用戶身份,并根據(jù)用戶身份生成一個用戶會話來存儲用戶身份憑證,其中唯一標識符會作為響應的一部分傳到客戶端保存?;诓煌氖褂脠鼍?,可以分為cookie、session和token 3種機制。

1.4? 用戶訪問受保護的資源

用戶登錄之后向程序發(fā)起的每一次請求,都會自動帶上保存在客戶端的唯一標識符,如果訪問的資源是受保護的,Web應用會主動檢查唯一標識符的有效性,即會話的有效性,如果會話已超時,就重定位到登錄頁面。

1.5? 服務器注銷用戶憑證和會話

當用戶完成操作或注銷登錄后,服務器會注銷用戶憑證和會話。

2? 用戶認證機制

Web應用程序是基于HTTP網(wǎng)絡傳輸協(xié)議實現(xiàn)的,而HTTP本身具有無連接的特點,即每次請求和響應之間是獨立的,為實現(xiàn)用戶認證,需要根據(jù)使用場景使用額外的技術(shù)來實現(xiàn)和維持登錄狀態(tài)[1]。

2.1? 用戶認證之cookie

cookie的原理是將用戶身份驗證信息以小型的文本文件方式保存在客戶端瀏覽器中,每次用戶向Web服務器發(fā)起請求時,瀏覽器會自動將cookie附加到HTTP請求頭中發(fā)送給Web服務器,服務器通過解析cookie來獲取用戶身份驗證信息[2]。cookie的優(yōu)點是易于實現(xiàn)和管理,但由于用戶可以在本地修改和操縱cookie,因此必須謹慎使用。此外,cookie還有大小限制,可以存儲的用戶信息較少。

2.2? 用戶認證之session

session是為了解決cookie存儲在客戶端容易被篡改或偽造而升級的一種機制,通過session對象的方式將用戶身份信息存儲在服務器,而session對象包含的唯一id則作為cookie的一部分傳遞到客戶端瀏覽器保存。當用戶再次訪問網(wǎng)站時,就通過session id查找對應的session對象,檢查是否過期。相較于cookie而言,session機制將用戶鑒權(quán)信息保存在服務器端,因此比cookie更加安全。

2.3? 用戶認證之token

token是用戶登錄成功后,服務器為用戶創(chuàng)建的基于json格式存儲用戶信息的認證機制。token以cookies或緩存的方式存在于客戶端,與cookie相比,token以包含簽名的方式防止偽造[3]。token主要應用在微服務、移動應用、對外API場景中,屬于高級的用戶認證機制。

2.4? Django的session機制

在Django中使用的用戶認證機制是session機制。默認情況下Django將session對象存儲在數(shù)據(jù)庫中,也可以將session存儲在緩存中或文件中。常見的網(wǎng)站首頁未登錄時右上角顯示“登錄”按鈕,已登錄時則顯示當前登錄的用戶名這一場景,用Django實現(xiàn)的步驟如下。

(1)在setting.py文件中設置session的存儲方式:session_engine值(默認為Django.contrib.sessions.backends.db,即數(shù)據(jù)庫存儲)。

(2)設置session信息:在視圖中通過request.session[session_key]

=session_value的格式設置以鍵值形式存儲的session信息。

(3)使用session信息:在模板中使用{{ request.session.session_key }}來獲取session的key;在視圖函數(shù)中通過request.session.get(session_key)的方式獲取session的key。

3? Django的訪問控制機制

Django的Access Control提供了多種訪問控制方式,包括中間件、裝飾器等多種機制,以適應不同的鑒權(quán)場景。

3.1? 中間件

客戶端與瀏覽器的交互在Django機制下的過程是:客戶端發(fā)起的請求在到達視圖函數(shù)處理前會先經(jīng)過Django的一個個中間件,每個中間件有機會觀察或修改請求,并將他們傳遞給下一個中間件,通過了所有中間件的驗證放行,請求才能到達視圖函數(shù),否則會直接返回客戶端。服務器的響應也是通過層層中間件的驗證,進行必要的加工處理后才到達客戶端。

中間件其實就是一個類,繼承了MiddlewareMixin類,類內(nèi)定義了一些函數(shù),如process_request()、process_response()等方法。請求到達Django程序時會依次執(zhí)行中間件的process_request方法,直到最后一個中間件傳遞給view處理函數(shù)。完成view處理函數(shù)的執(zhí)行后,將執(zhí)行的結(jié)果response返回給最后一個中間件的process_response方法,直到第一個中間件處理完process_response方法并返回response[2]。

關于用戶是否登錄的校驗可以封裝在一個中間件的process_request方法里,通過request.session.get()方法獲取身份校驗信息,對于不需要登錄就能訪問的網(wǎng)頁,如注冊、登錄頁放行(process_request函數(shù)沒有返回值或返回為空),對于其他頁面,如果沒有登錄就強制重定向到登錄頁面。

讓中間件生效需要在settings.py的文件的MIDDLEWARE字段注冊中間件。中間件按照注冊的順序從上往下執(zhí)行,自定義的中間件注冊時根據(jù)使用場景合理考慮位置。

3.2? 裝飾器

裝飾器(Decorator)本質(zhì)上是一個Python函數(shù)或類,用來給其他函數(shù)或類添加額外功能而不用修改類或函數(shù)本身。下面是一個示例,用于檢查用戶是否已登錄并進行相應的處理。

def login_required(view_func):

def wrapped_view(request, *args, **kwargs):

if not request.user.is_authenticated: #? 判斷狀態(tài)是否為登錄

return redirect('login')? # 重定向到登錄頁面

return view_func(request, *args, **kwargs)

return wrapped_view

裝飾器的實現(xiàn)方式是函數(shù)對象、閉包加@語法糖。Python的函數(shù)可以作為返回值傳遞給其他函數(shù),這是使用裝飾器的基礎。閉包就是函數(shù)的嵌套,內(nèi)部函數(shù)可以訪問外部函數(shù)的變量、參數(shù)和其他內(nèi)部函數(shù),最后返回內(nèi)部函數(shù)的引用[4]。@語法糖用于簡化裝飾器的調(diào)用方式,實現(xiàn)方式是在被裝飾函數(shù)上方添加一個@符號,緊接著是裝飾器函數(shù)的名字。

上述代碼定義了一個裝飾器login_required,它接收一個視圖函數(shù)view_func作為參數(shù),并返回一個新的包裹了原視圖函數(shù)的函數(shù)wrapped_view。在wrapped_view中,檢查用戶是否已經(jīng)通過身份驗證(即登錄狀態(tài)),如果沒有通過驗證,則將用戶重定向到登錄頁面。

使用裝飾器來保護需要登錄驗證的視圖函數(shù),如下例:

@login_required

def my_view(request):

# 用戶必須登錄后才能訪問的視圖函數(shù)

# 執(zhí)行相應的處理邏輯

當使用@語法糖調(diào)用裝飾器時,被裝飾的函數(shù)作為裝飾器函數(shù)的參數(shù)傳遞給裝飾器函數(shù),并將裝飾器函數(shù)的返回值賦值給原始函數(shù)的引用。在上述代碼中,通過在視圖函數(shù)my_view上使用@login_required裝飾器,實現(xiàn)該視圖函數(shù)只有在用戶已登錄的情況下才能被訪問,否則用戶將被重定向到登錄頁面。

Python的裝飾器還可以形成鏈式調(diào)用,一個或多個裝飾器可以依次對函數(shù)進行包裝和修改。

4? 結(jié)語

用戶鑒權(quán)機制是網(wǎng)絡安全的重要組成部分,Django的用戶鑒權(quán)機制提供了一個強大而靈活的工具來實現(xiàn)用戶認證和權(quán)限管理。除了本文提到的session機制和中間件、裝飾器實現(xiàn)的訪問控制,Django還提供了強大的權(quán)限系統(tǒng)組件如 Permission、model Permission等更進階的封裝。通過深入研究和理解這些機制,可以構(gòu)建出安全可靠的應用程序,并為用戶提供良好的訪問體驗。希望本文的研究能對讀者在使用和擴展Django的鑒權(quán)機制上,提供有益的指導和啟示。

參考文獻

[1]劉翠芬.淺談基于HTTP方式的認證[J].職教論壇,2003(20):57.

[2]趙路.Django框架CSRF防御實現(xiàn)機制淺析[J].網(wǎng)絡安全技術(shù)與應用,2021(4):18-19.

[3]林琳.詳細了解Cookie Session Token[J].計算機與網(wǎng)絡,2019(22):38-40.

[4]李德水.Python類裝飾器裝飾方法通用編碼模型分析[J].電子設計工程,2020(13):41-44,49.

(編輯? 沈? 強)

Analysis and research on user authentication mechanism under Django framework

Zhang? Xiaomei, He? Ju*, She? Kankan, Dai? Caiyan

(College of Artificial Intelligence and Information Technology,Nanjing University of Chinese Medicine, Nanjing 210023, China)

Abstract:? User authentication is an important component of ensuring data security in web applications. Its main function is to confirm the identity of each user in the web application, in order to restrict user access and operation of resources. This article starts with the lifecycle and main technical principles of user authentication, and combines the interpretation of the basic user authentication mechanisms, namely middleware and decorator, in the Django framework. It analyzes the importance of user authentication mechanisms and the diversity of technical implementations from simple to deep, allowing readers to understand network security design knowledge based on user authentication from a theoretical perspective, and to better understand the design of user authentication logic from the encapsulation process of Django.

Key words: user authentication; Django framework; authentication

猜你喜歡
身份驗證
聲紋識別認證云落戶貴州
可信計算的無線傳感器網(wǎng)絡終端身份認證機制探討
HID Global收購Arjo Systems擴大政府身份驗證業(yè)務
人臉識別身份驗證系統(tǒng)在養(yǎng)老保險生存核查中的應用
基于Windows下的文件保密隱藏系統(tǒng)的設計與實現(xiàn)
智能家居系統(tǒng)安全性方案的設計
一種融合角點特征匹配的人臉優(yōu)化識別方法
計算機時代(2016年3期)2016-03-21 15:59:59
更安全的雙重密碼保護
CHIP新電腦(2015年3期)2015-04-02 17:55:46
Endogenous neurotrophin-3 promotes neuronal sprouting from dorsal root ganglia
HID Global推動多層身份驗證解決方案
竹北市| 张家口市| 曲阜市| 康定县| 普陀区| 乌什县| 新乡县| 贡山| 罗山县| 布拖县| 化德县| 唐河县| 武隆县| 伊吾县| 黔东| 额尔古纳市| 旺苍县| 黄平县| 象州县| 新蔡县| 颍上县| 镇沅| 正安县| 盐源县| 郑州市| 苏尼特右旗| 文水县| 略阳县| 闸北区| 宾阳县| 托克逊县| 兴仁县| 承德县| 龙南县| 吉首市| 什邡市| 贵德县| 黑龙江省| 罗田县| 霞浦县| 清徐县|