999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

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

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

張小梅 何菊 佘侃侃 戴彩艷

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

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

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

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

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

中圖分類號(hào):TN915.04中圖分類號(hào)? 文獻(xiàn)標(biāo)志碼:A文獻(xiàn)標(biāo)志碼

0? 引言

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

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

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

1.1? 用戶提交身份驗(yàn)證憑證

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

1.2? 服務(wù)器驗(yàn)證憑證的有效性

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

1.3? 服務(wù)器校驗(yàn)成功

用戶身份驗(yàn)證成功,服務(wù)器將會(huì)生成一個(gè)唯一的標(biāo)識(shí)符代表用戶身份,并根據(jù)用戶身份生成一個(gè)用戶會(huì)話來存儲(chǔ)用戶身份憑證,其中唯一標(biāo)識(shí)符會(huì)作為響應(yīng)的一部分傳到客戶端保存。基于不同的使用場(chǎng)景,可以分為cookie、session和token 3種機(jī)制。

1.4? 用戶訪問受保護(hù)的資源

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

1.5? 服務(wù)器注銷用戶憑證和會(huì)話

當(dāng)用戶完成操作或注銷登錄后,服務(wù)器會(huì)注銷用戶憑證和會(huì)話。

2? 用戶認(rèn)證機(jī)制

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

2.1? 用戶認(rèn)證之cookie

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

2.2? 用戶認(rèn)證之session

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

2.3? 用戶認(rèn)證之token

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

2.4? Django的session機(jī)制

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

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

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

=session_value的格式設(shè)置以鍵值形式存儲(chǔ)的session信息。

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

3? Django的訪問控制機(jī)制

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

3.1? 中間件

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

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

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

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

3.2? 裝飾器

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

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

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

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

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

@login_required

def my_view(request):

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

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

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

Python的裝飾器還可以形成鏈?zhǔn)秸{(diào)用,一個(gè)或多個(gè)裝飾器可以依次對(duì)函數(shù)進(jìn)行包裝和修改。

4? 結(jié)語

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

參考文獻(xiàn)

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

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

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

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

(編輯? 沈? 強(qiáng))

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

主站蜘蛛池模板: 九九这里只有精品视频| 国产综合精品日本亚洲777| 国产福利微拍精品一区二区| 国产精品13页| 91在线无码精品秘九色APP| AV天堂资源福利在线观看| 国产毛片不卡| 日韩av在线直播| 亚洲大学生视频在线播放| 亚洲国产欧美目韩成人综合| 67194亚洲无码| 找国产毛片看| 欧美精品另类| 日韩高清欧美| 亚洲人成网址| 全部毛片免费看| 国产精品熟女亚洲AV麻豆| 国产无套粉嫩白浆| 精品人妻AV区| 国产精品永久不卡免费视频| 国产欧美视频综合二区| 国产一级无码不卡视频| 91在线国内在线播放老师| 亚洲成人免费在线| www.亚洲一区二区三区| 国产在线精品网址你懂的 | 久久精品国产免费观看频道| 国产中文一区a级毛片视频| 91久久精品日日躁夜夜躁欧美| 亚洲第一视频网| 露脸真实国语乱在线观看| 国产在线无码一区二区三区| 国产AV毛片| 午夜性刺激在线观看免费| 天天综合网色中文字幕| 欧美精品不卡| аⅴ资源中文在线天堂| 免费久久一级欧美特大黄| 国产情侣一区二区三区| 国模粉嫩小泬视频在线观看| 欧美性精品不卡在线观看| 国产一区二区色淫影院| 91在线播放免费不卡无毒| 国产精品主播| 成人国产小视频| 亚洲人成在线免费观看| 欧美一级高清免费a| 成年午夜精品久久精品| 国产69精品久久久久孕妇大杂乱| 国产鲁鲁视频在线观看| 国产欧美日韩一区二区视频在线| 免费看美女毛片| 国产人免费人成免费视频| 最新日韩AV网址在线观看| 丰满人妻久久中文字幕| 99999久久久久久亚洲| 久久a级片| 亚洲 欧美 偷自乱 图片| 国模极品一区二区三区| 国产成人精品综合| 波多野结衣一级毛片| 亚洲二区视频| 人人91人人澡人人妻人人爽| 日韩福利在线视频| 国产69精品久久久久妇女| 亚洲久悠悠色悠在线播放| 日韩免费毛片| 手机在线看片不卡中文字幕| 色婷婷在线影院| 久久视精品| 2020精品极品国产色在线观看| аⅴ资源中文在线天堂| 国产天天色| 亚洲人成网站色7799在线播放 | 国产屁屁影院| 欧美综合一区二区三区| 国产无码在线调教| 国产麻豆精品久久一二三| 国产一区二区精品福利| 亚洲91精品视频| 亚洲一区二区成人| 精品国产Av电影无码久久久|