這期內(nèi)容當中小編將會給大家?guī)碛嘘P(guān)八幅漫畫理解使用JSON Web Token設(shè)計單點登錄系統(tǒng),文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

創(chuàng)新互聯(lián)是一家業(yè)務(wù)范圍包括IDC托管業(yè)務(wù),虛擬空間、主機租用、主機托管,四川、重慶、廣東電信服務(wù)器租用,綿陽機房托管,成都網(wǎng)通服務(wù)器托管,成都服務(wù)器租用,業(yè)務(wù)范圍遍及中國大陸、港澳臺以及歐美等多個國家及地區(qū)的互聯(lián)網(wǎng)數(shù)據(jù)服務(wù)公司。
所謂用戶認證(Authentication),就是讓用戶登錄,并且在接下來的一段時間內(nèi)讓用戶訪問網(wǎng)站時可以使用其賬戶,而不需要再次登錄的機制。
小知識:可別把用戶認證和用戶授權(quán)(Authorization)搞混了。用戶授權(quán)指的是規(guī)定并允許用戶使用自己的權(quán)限,例如發(fā)布帖子、管理站點等。
首先,服務(wù)器應(yīng)用(下面簡稱“應(yīng)用”)讓用戶通過Web表單將自己的用戶名和密碼發(fā)送到服務(wù)器的接口。這一過程一般是一個HTTP POST請求。建議的方式是通過SSL加密的傳輸(https協(xié)議),從而避免敏感信息被嗅探。
接下來,應(yīng)用和數(shù)據(jù)庫核對用戶名和密碼。
核對用戶名和密碼成功后,應(yīng)用將用戶的id(圖中的user_id)作為JWT Payload的一個屬性,將其與頭部分別進行Base64編碼拼接后簽名,形成一個JWT。這里的JWT就是一個形同lll.zzz.xxx的字符串。
應(yīng)用將JWT字符串作為該請求Cookie的一部分返回給用戶。注意,在這里必須使用HttpOnly屬性來防止Cookie被JavaScript讀取,從而避免跨站腳本攻擊(XSS攻擊)。
在Cookie失效或者被刪除前,用戶每次訪問應(yīng)用,應(yīng)用都會接受到含有jwt的Cookie。從而應(yīng)用就可以將JWT從請求中提取出來。
應(yīng)用通過一系列任務(wù)檢查JWT的有效性。例如,檢查簽名是否正確;檢查Token是否過期;檢查Token的接收方是否是自己(可選)。
應(yīng)用在確認JWT有效之后,JWT進行Base64解碼(可能在上一步中已經(jīng)完成),然后在Payload中讀取用戶的id值,也就是user_id屬性。這里用戶的id為1025。
應(yīng)用從數(shù)據(jù)庫取到id為1025的用戶的信息,加載到內(nèi)存中,進行ORM之類的一系列底層邏輯初始化。
應(yīng)用根據(jù)用戶請求進行響應(yīng)。
Session方式存儲用戶id的最大弊病在于要占用大量服務(wù)器內(nèi)存,對于較大型應(yīng)用而言可能還要保存許多的狀態(tài)。一般而言,大型應(yīng)用還需要借助一些KV數(shù)據(jù)庫和一系列緩存機制來實現(xiàn)Session的存儲。
而JWT方式將用戶狀態(tài)分散到了客戶端中,可以明顯減輕服務(wù)端的內(nèi)存壓力。除了用戶id之外,還可以存儲其他的和用戶相關(guān)的信息,例如該用戶是否是管理員、用戶所在的分桶(見[《你所應(yīng)該知道的A/B測試基礎(chǔ)》一文](/2015/08/27/introduction-to-ab-testing/)等。
雖說JWT方式讓服務(wù)器有一些計算壓力(例如加密、編碼和解碼),但是這些壓力相比磁盤I/O而言或許是半斤八兩。具體是否采用,需要在不同場景下用數(shù)據(jù)說話。
Session方式來存儲用戶id,一開始用戶的Session只會存儲在一臺服務(wù)器上。對于有多個子域名的站點,每個子域名至少會對應(yīng)一臺不同的服務(wù)器,例如:
www.taobao.com
nv.taobao.com
nz.taobao.com
login.taobao.com
所以如果要實現(xiàn)在login.taobao.com登錄后,在其他的子域名下依然可以取到Session,這要求我們在多臺服務(wù)器上同步Session。
使用JWT的方式則沒有這個問題的存在,因為用戶的狀態(tài)已經(jīng)被傳送到了客戶端。因此,我們只需要將含有JWT的Cookie的domain設(shè)置為頂級域名即可,例如
1 | Set-Cookie: jwt=lll.zzz.xxx; HttpOnly; max-age=980000; domain=.taobao.com |
注意domain必須設(shè)置為一個點加頂級域名,即.taobao.com。這樣,taobao.com和*.taobao.com就都可以接受到這個Cookie,并獲取JWT了。
上述就是小編為大家分享的八幅漫畫理解使用JSON Web Token設(shè)計單點登錄系統(tǒng)了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。
當前題目:怎樣使用JSONWebToken設(shè)計單點登錄系統(tǒng)
網(wǎng)站網(wǎng)址:http://chinadenli.net/article38/ihpdpp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站維護、營銷型網(wǎng)站建設(shè)、企業(yè)建站、標簽優(yōu)化、網(wǎng)站設(shè)計、ChatGPT
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)