▲ 《 Python+Java雙語視頻》 ▲
對于登錄功能大家應(yīng)該都不陌生sub,無論我們?nèi)ス潆娚唐脚_還是去看一些文章論壇,都會有一些訪問權(quán)限,這個時候就需要登錄,這樣才能享受更多沖浪的樂趣,對吧。但是由于http的無狀態(tài)性,無狀態(tài)性就是客戶端每次發(fā)出請求時,下一次請求無法得知上一次請求所包換的狀態(tài)數(shù)據(jù),換句話說就算是sub你登錄了,下一次請求也無法得知上一次用戶成功登錄過,那么這個該如何解決呢sub?
這個就是我要給大家分享的主題,如何記住用戶的登錄狀態(tài),即登錄的鑒權(quán)方法。那么接下來我們就談一下幾種常見的登錄鑒權(quán)方法吧。
01
cookie和session
1、cookie是什么?
Cookie實際上是 一小段的文本信息??蛻舳苏埱蠓?wù)器,如果服務(wù)器需要記錄該用戶狀態(tài),就使用response向客戶端瀏覽器頒發(fā)一個Cookie??蛻舳藭袰ookie保存起來。
當(dāng)瀏覽器再請求該網(wǎng)站時,瀏覽器把請求的網(wǎng)址連同該Cookie一同提交給服務(wù)器。服務(wù)器檢查該Cookie,以此來辨認(rèn)用戶狀態(tài)。服務(wù)器還可以根據(jù)需要修改Cookie的內(nèi)容。
信息保存的時間可以根據(jù)需要設(shè)置
2、session是什么?
Session是另一種 記錄客戶狀態(tài)的機(jī)制,不同的是Cookie保存在客戶端瀏覽器中,而 Session保存在服務(wù)器上??蛻舳藶g覽器訪問服務(wù)器的時候,服務(wù)器把客戶端信息以某種形式記錄在服務(wù)器上,這就是Session??蛻舳藶g覽器再次訪問時只需要從該Session中查找該客戶的狀態(tài)就可以了。
3、總結(jié)
服務(wù)端存儲 session ,客戶端存儲 cookie,其中 cookie 保存的為 sessionID
4、適用場景
適合傳統(tǒng)系統(tǒng)獨立鑒權(quán)
02
JWT
1、JWT是什么?
JSON Web Token(JWT)是一個非常輕巧的規(guī)范。這個規(guī)范允許我們 使用JWT在兩個組織之間傳遞安全可靠的信息。
JWT是一個有著簡單的統(tǒng)一表達(dá)形式的字符串, 由三部分組成,分別是header(頭部),payload(載荷),signature(簽證) 這三部分以小數(shù)點連接起來。
頭部(Header)
頭部用于描述關(guān)于該JWT的最基本的信息,例如其類型以及簽名所用的算法等。JSON內(nèi)容要經(jīng)Base64編碼生成字符串成為Header。
載荷(PayLoad)
payload的五個字段都是由JWT的標(biāo)準(zhǔn)所定義的。
iss : 該JWT的簽發(fā)者
sub : 該JWT所面向的用戶
aud : 接收該JWT的一方
exp(expires) : 什么時候過期,這里是一個Unix時間戳
iat(issued at) : 在什么時候簽發(fā)的
后面的信息可以按需補(bǔ)充。JSON內(nèi)容要經(jīng) Base64 編碼生成字符串成為PayLoad。
簽名(signature)
這個部分 header 與 payload通過header中聲明的加密方式,使用密鑰secret進(jìn)行加密,生成簽名。JWS的主要目的是 保證了數(shù)據(jù)在傳輸過程中不被修改,驗證數(shù)據(jù)的完整性。但由于僅采用 Base64對消息內(nèi)容編碼,因此不保證數(shù)據(jù)的不可泄露性。所以不適合用于傳輸敏感數(shù)據(jù)。
2、總結(jié)
服務(wù)器不再需要存儲 session,服務(wù)器認(rèn)證鑒權(quán)業(yè)務(wù)可以方便擴(kuò)展
JWT 并不依賴 cookie,也可以使用 header 傳遞
為減少盜用,要使用 https 協(xié)議傳輸
3、適用場景:
適合做簡單的 RESTful API 認(rèn)證
適合一次性驗證,例如注冊激活鏈接
03
HTTP Auth Authentication
HTTP 提供一個用于權(quán)限控制和認(rèn)證的通用框架。最常用的HTTP認(rèn)證方案是 HTTP Basic Authentication。
在HTTP協(xié)議進(jìn)行通信的過程中,HTTP協(xié)議定義了基本認(rèn)證過程以允許HTTP服務(wù)器對Web瀏覽器進(jìn)行用戶身份認(rèn)證的方法,當(dāng)一個客戶端向HTTP服務(wù)器進(jìn)行數(shù)據(jù)請求時,如果客戶端未被認(rèn)證,則HTTP服務(wù)器將通過基本認(rèn)證過程對客戶端的用戶名及密碼進(jìn)行驗證,以決定用戶是否合法。客戶端在接收到HTTP服務(wù)器的身份認(rèn)證要求后,會提示用戶輸入用戶名及密碼, 用戶輸入后,客戶端將用戶名和密碼中間用“:”分隔合并,并將合并后的字符串用BASE64編碼,在每次請求數(shù)據(jù)時,將密文附加于請求頭 (Request Header)Authorization: Basic XXXXXXX中。
HTTP服務(wù)器在每次收到請求包后,根據(jù)協(xié)議取得客戶端附加的用戶信息(BASE64編碼的用戶名和密碼),解開請求包,對用戶名及密碼進(jìn)行驗證,如果用戶名及密碼正確,則根據(jù)客戶端請求,返回客戶端所需要的數(shù)據(jù);否則,返回錯誤代碼或重新要求客戶端提供用戶名及密碼。
總結(jié)
通用 HTTP 身份驗證框架有多個驗證方案使用。 不同的驗證方案會在安全強(qiáng)度上有所不同。 HTTP Auth Authentication 是最常用的 HTTP認(rèn)證方案,為了減少泄露風(fēng)險一般要求 https 協(xié)議。
適用場景
一般多被 用在內(nèi)部安全性要求不高的的系統(tǒng)上,例如加了提取碼的網(wǎng)盤資源
問題
請求上攜帶驗證信息,容易被嗅探到
無法注銷
適合一次性驗證,例如注冊激活鏈接
學(xué)習(xí)安排上sub!
碼個資料送給你
▲ 《 Python+Java雙語視頻》 ▲
掃描下方二維碼免費領(lǐng)取
“在看”點一點
?? ?? ??