和jwt_秒懂 JWT
作者 | 喵叔
責(zé)編 | 胡巍巍
出品 | 程序人生(ID:coder_life)
JWT 英文名是 Json Web Token ,是一種用于通信雙方之間傳遞安全信息的簡(jiǎn)潔的、URL安全的表述性聲明規(guī)范,經(jīng)常用在跨域身份驗(yàn)證。
JWT 以 JSON 對(duì)象的形式安全傳遞信息。因?yàn)榇嬖跀?shù)字簽名,因此所傳遞的信息是安全的。
在講解 JWT 之前我們先來(lái)看一個(gè)問(wèn)題。我們都知道 Internet 服務(wù)的身份驗(yàn)正過(guò)程是這樣的,客戶端向服務(wù)器發(fā)送登錄名和登錄密碼,服務(wù)器驗(yàn)證后將對(duì)應(yīng)的相關(guān)信息保存到當(dāng)前會(huì)話中,這些信息包括權(quán)限、角色等數(shù)據(jù)。
服務(wù)器向客戶端返回 Session ,Session 信息都會(huì)寫入到客戶端的 Cookie 中,后面的請(qǐng)求都會(huì)從 Cookie 中讀取 Session 發(fā)送給服務(wù)器,服務(wù)器在收到 Session 后會(huì)對(duì)比保存的數(shù)據(jù)來(lái)確認(rèn)客戶端身份。
但是上述模式存在一個(gè)問(wèn)題,無(wú)法橫向擴(kuò)展。在服務(wù)器集群或者面向服務(wù)且跨域的結(jié)構(gòu)中,需要數(shù)據(jù)庫(kù)來(lái)保存 Session 會(huì)話,實(shí)現(xiàn)服務(wù)器之間的會(huì)話數(shù)據(jù)共享。
在單點(diǎn)登錄中我們會(huì)遇到上述問(wèn)題,當(dāng)有多個(gè)網(wǎng)站提供同一撥服務(wù),那么我們?cè)撛趺磳?shí)現(xiàn)在甲網(wǎng)站登陸后其他網(wǎng)站也同時(shí)登錄呢?
其中一種方法是持久化 Session 數(shù)據(jù),也就是上面所說(shuō)的將 Session 會(huì)話存到數(shù)據(jù)庫(kù)中。這個(gè)方法的優(yōu)點(diǎn)是架構(gòu)清晰明了。
但是缺點(diǎn)也非常明顯,就是架構(gòu)修改很困難,驗(yàn)證邏輯需要重寫,并且整體依賴于數(shù)據(jù)庫(kù),如果存儲(chǔ) Session 會(huì)話的數(shù)據(jù)庫(kù)掛掉那么整個(gè)身份認(rèn)證就無(wú)法使用,進(jìn)而導(dǎo)致系統(tǒng)無(wú)法登錄。要解決這個(gè)問(wèn)題我們就用到了 JWT 。
JWT 簡(jiǎn)述
客戶端身份經(jīng)過(guò)服務(wù)器驗(yàn)證通過(guò)后,會(huì)生成帶有簽名的 JSON 對(duì)象并將它返回給客戶端。客戶端在收到這個(gè) JSON 對(duì)象后存儲(chǔ)起來(lái)。
在以后的請(qǐng)求中客戶端將 JSON 對(duì)象連同請(qǐng)求內(nèi)容一起發(fā)送給服務(wù)器,服務(wù)器收到請(qǐng)求后通過(guò) JSON 對(duì)象標(biāo)識(shí)用戶,如果驗(yàn)證不通過(guò)則不返回請(qǐng)求的數(shù)據(jù)。
驗(yàn)證不通過(guò)的情況有很多,比如簽名不正確、無(wú)權(quán)限等。在 JWT 中服務(wù)器不保存任何會(huì)話數(shù)據(jù),使得服務(wù)器更加容易擴(kuò)展。
Base64URL 算法
在講解 JWT 的組成結(jié)構(gòu)前我們先來(lái)講解一下 Base64URL 算法。這個(gè)算法和 Base64 算法類似,但是有一點(diǎn)區(qū)別。
我們通過(guò)名字可以得知這個(gè)算法使用于 URL 的,因此它將 Base64 中的 + 、 / 、 = 三個(gè)字符替換成了 - 、 _ ,刪除掉了 = 。因?yàn)檫@個(gè)三個(gè)字符在 URL 中有特殊含義。
JWT 組成結(jié)構(gòu)
JWT 是由三段字符串和兩個(gè) . 組成,每個(gè)字符串和字符串之間沒有換行(類似于這樣:xxxxxx.yyyyyy.zzzzzz),每個(gè)字符串代表了不同的功能,我們將這三個(gè)字符串的功能按順序列出來(lái)并講解:
1. JWT 頭
JWT 頭描述了 JWT 元數(shù)據(jù),是一個(gè) JSON 對(duì)象,它的格式如下:
json
{
"alg":"HS256
總結(jié)
以上是生活随笔為你收集整理的和jwt_秒懂 JWT的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 怎么点亮段码屏_段码液晶屏有鬼影怎么处理
- 下一篇: 服务器flask远程访问_在Flask中