武漢建站公司排名百度搜索高級(jí)搜索
目錄
一、什么是JWT
二、JWT令牌和Cookie客戶(hù)端、Session服務(wù)端對(duì)比
三、特點(diǎn)與注意事項(xiàng)
四、使用場(chǎng)景
優(yōu)點(diǎn):?
五、結(jié)構(gòu)組成
一、什么是JWT
JWT(JSON Web Token)是一種用于在網(wǎng)絡(luò)應(yīng)用間傳遞信息的開(kāi)放標(biāo)準(zhǔn)(RFC 7519)。它以 JSON 格式存儲(chǔ)被加密后的信息,通常用于驗(yàn)證和身份認(rèn)證。這是token驗(yàn)證的一種令牌。叫身份驗(yàn)證令牌。在前后端分離的架構(gòu)中常用。
白話(huà)文理解:?
????????在以前用cookie認(rèn)證時(shí)候,會(huì)把狀態(tài)信息什么的儲(chǔ)存在服務(wù)器里面,隨著用戶(hù)越來(lái)越多,會(huì)造成服務(wù)器的壓力。那么jwt就出來(lái)了,你什么時(shí)候來(lái),我什么時(shí)候給你頒發(fā)一個(gè)認(rèn)證授權(quán)訪(fǎng)問(wèn)的令牌就好,不會(huì)儲(chǔ)存在服務(wù)器里面。啪,給你蓋章通過(guò)認(rèn)證了,你可以帶著這個(gè)令牌請(qǐng)求去訪(fǎng)問(wèn)我們服務(wù)器的資源了。
二、JWT令牌和Cookie客戶(hù)端、Session服務(wù)端對(duì)比
簡(jiǎn)單介紹cookie和Session:
服務(wù)器會(huì)為每個(gè)用戶(hù)創(chuàng)建一個(gè)唯一的會(huì)話(huà)標(biāo)識(shí),這個(gè)標(biāo)識(shí)會(huì)存儲(chǔ)在客戶(hù)端的 Cookie 中。實(shí)際的會(huì)話(huà)數(shù)據(jù)則存儲(chǔ)在服務(wù)器上,可以存儲(chǔ)用戶(hù)的登錄狀態(tài)、購(gòu)物車(chē)內(nèi)容等信息。Session 通常使用內(nèi)存或數(shù)據(jù)庫(kù)來(lái)存儲(chǔ)會(huì)話(huà)數(shù)據(jù)。?
jwt和cookie都是用于驗(yàn)證用戶(hù)身份和維護(hù)會(huì)話(huà)狀態(tài)的機(jī)制。
1.儲(chǔ)存位置:
????????cookie是儲(chǔ)存在客戶(hù)端瀏覽器中的小型文本文件,由服務(wù)器在響應(yīng)中設(shè)置,會(huì)把會(huì)話(huà)的各種信息都存在服務(wù)器中,會(huì)造成服務(wù)器的壓力。大型的項(xiàng)目要分布式處理負(fù)載均衡就會(huì)不方便,因?yàn)榘颜J(rèn)證信息儲(chǔ)存在了單一的服務(wù)器上面。
????????jwt令牌是無(wú)狀態(tài)的,隨時(shí)訪(fǎng)問(wèn)隨時(shí)給令牌認(rèn)證,一次性的,所以單點(diǎn)登錄很適合。不會(huì)給服務(wù)器造成壓力。
2.安全性:
?????????Cookie 存儲(chǔ)在客戶(hù)端,容易受到跨站腳本攻擊(XSS)和跨站請(qǐng)求偽造攻擊(CSRF)等安全威脅。
?????????令牌可以使用 HTTPS 加密傳輸,可以防止在傳輸過(guò)程中的竊聽(tīng)和篡改,提高了安全性。
3. 跨域:
?????????默認(rèn)情況下,Cookie 在同一域名下共享,但有限制。
????????令牌可以在不同域名下共享,通過(guò)跨域資源共享(CORS)等機(jī)制,提供了更大的靈活性。
4.負(fù)擔(dān)
cookie全部域名都發(fā)送到服務(wù)端會(huì)造成服務(wù)端的壓力,jwt令牌可以根據(jù)需要發(fā)送。?
總的來(lái)說(shuō),雖然 Cookie 和令牌都可以用于身份驗(yàn)證和會(huì)話(huà)管理,但由于令牌的安全性和靈活性更高,以及更適合現(xiàn)代 Web 應(yīng)用的需求,令牌機(jī)制(如 JWT)在很多情況下被更廣泛地采用。
三、特點(diǎn)與注意事項(xiàng)
JWT 具有輕量、可傳遞、自包含、易于驗(yàn)證等特點(diǎn),使其成為在不同系統(tǒng)間安全傳遞信息的一種有效方式。然而,使用 JWT 時(shí)仍需注意安全性問(wèn)題,特別是保護(hù)秘密密鑰、適當(dāng)?shù)挠行谠O(shè)置等。?這是可被破譯的,里面放一些公開(kāi)可以看的信息就好。不要放敏感信息,比如密碼等。
四、使用場(chǎng)景
它主要用于在不同實(shí)體之間安全地傳輸信息,通常用作身份驗(yàn)證和授權(quán)的方式。?JWT 在許多應(yīng)用中廣泛使用,特別是在無(wú)狀態(tài)的分布式系統(tǒng)中,如單頁(yè)應(yīng)用、移動(dòng)應(yīng)用和微服務(wù)。它可以在令牌中包含有關(guān)用戶(hù)的信息,并通過(guò)數(shù)字簽名或加密來(lái)驗(yàn)證和保護(hù)令牌的完整性。JWT 適用于需要跨多個(gè)服務(wù)進(jìn)行驗(yàn)證和授權(quán)的場(chǎng)景。
-
身份驗(yàn)證(Authentication): 用戶(hù)登錄后,服務(wù)器生成一個(gè)包含用戶(hù)信息的 JWT,然后將 JWT 發(fā)送給客戶(hù)端??蛻?hù)端之后在每個(gè)請(qǐng)求中攜帶該 JWT,服務(wù)器可以校驗(yàn) JWT 的有效性來(lái)認(rèn)證用戶(hù)。
-
授權(quán)(Authorization): JWT 可以包含用戶(hù)的權(quán)限信息,服務(wù)器可以根據(jù) JWT 中的權(quán)限信息控制用戶(hù)對(duì)資源的訪(fǎng)問(wèn)。
-
信息交換(Information Exchange): 在不同的應(yīng)用之間傳遞信息,由于 JWT 包含了一定的信息,可以用于安全地傳遞數(shù)據(jù)。
-
單點(diǎn)登錄(Single Sign-On,SSO): 在多個(gè)應(yīng)用間共享用戶(hù)登錄狀態(tài),用戶(hù)只需要登錄一次即可訪(fǎng)問(wèn)多個(gè)應(yīng)用。
優(yōu)點(diǎn):?
因?yàn)槭莏son傳輸?shù)?#xff0c;可以跨語(yǔ)言使用;還能在中間的載荷位置放一些不敏感的信息;字節(jié)占用小,傳輸方便;不會(huì)保存在服務(wù)器里面,容易擴(kuò)展分布式。
五、結(jié)構(gòu)組成
結(jié)構(gòu)示例
a.b.c
?一個(gè) JWT 由三部分組成:頭部(Header)、載荷(Payload)和簽名(Signature)。每個(gè)部分都是使用 Base64 編碼的 JSON 對(duì)象,它們一起形成了完整的 JWT。
-
頭部(Header): 頭部通常由兩部分組成:令牌的類(lèi)型(JWT)和所使用的加密算法(如 HMAC SHA256 或 RSA)。
-
載荷(Payload): 載荷包含了需要傳遞的信息,可以是用戶(hù)的一些身份信息、權(quán)限、角色等。載荷是經(jīng)過(guò) Base64 編碼的 JSON 數(shù)據(jù)。
-
簽名(Signature): 簽名部分使用了頭部和載荷以及一個(gè)秘密密鑰,通過(guò)指定的加密算法進(jìn)行加密。簽名的目的是為了確保 JWT 沒(méi)有被篡改,同時(shí)也可以驗(yàn)證發(fā)送者的身份。
簡(jiǎn)單來(lái)說(shuō)頭部里面記錄的是使用的是什么加密算法、和令牌的類(lèi)型,即jwt。
載荷里面記錄的是含有三大聲明,注冊(cè)聲明:iss(發(fā)行者)、exp(到期時(shí)間)、sub(主題)、sub(受眾)。公開(kāi)聲明、私有聲明,這三個(gè)聲明都是非必要的,如果不聲明,載荷里面也會(huì)自動(dòng)生成數(shù)據(jù)代替載荷。
簽名就是在頭部和載荷已經(jīng)使用了加密算法后,再對(duì)他們進(jìn)行加密簽名,保證他們的數(shù)據(jù)不會(huì)被篡改。
有什么問(wèn)題都可以評(píng)論區(qū)留言,看見(jiàn)都會(huì)回復(fù)的
如果你覺(jué)得本篇文章對(duì)你有所幫助的,多多支持吧!!!
點(diǎn)贊收藏評(píng)論,當(dāng)然也可以點(diǎn)擊文章底部的紅包或者👇訂閱付費(fèi)文章創(chuàng)作支持一下了。抱拳了!