<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          為什么很多人不推薦你用JWT?

          共 2900字,需瀏覽 6分鐘

           ·

          2024-07-18 07:40

          關(guān)注我們,設(shè)為星標(biāo),每天7:40不見不散,架構(gòu)路上與您共享

          回復(fù)架構(gòu)師獲取資源


          大家好,我是你們的朋友架構(gòu)君,一個會寫代碼吟詩的架構(gòu)師。

          為什么很多人不推薦你用JWT?

          如果你經(jīng)常看一些網(wǎng)上的帶你做項目的教程,你就會發(fā)現(xiàn) 有很多的項目都用到了JWT。那么他到底安全嗎?為什么那么多人不推薦你去使用。這個文章將會從全方面的帶你了解JWT 以及他的優(yōu)缺點。

          什么是JWT?

          這個是他的官網(wǎng)JSON Web Tokens - jwt.io

          https://jwt.io/

          這個就是JWT

          JWT 全稱JSON Web Token

          如果你還不熟悉JWT,不要驚慌!它們并不那么復(fù)雜!

          你可以把JWT想象成一些JSON數(shù)據(jù),你可以驗證這些數(shù)據(jù)是來自你認(rèn)識的人。

          當(dāng)然如何實現(xiàn)我們在這里不講,有興趣的可以去自己了解。

          下面我們來說一下他的流程:

          • ? 當(dāng)你登錄到一個網(wǎng)站,網(wǎng)站會生成一個JWT并將其發(fā)送給你。

          • ? 這個JWT就像是一個包裹,里面裝著一些關(guān)于你身份的信息,比如你的用戶名、角色、權(quán)限等。

          • ? 然后,你在每次與該網(wǎng)站進(jìn)行通信時都會攜帶這個JWT。

          • ? 每當(dāng)你訪問一個需要驗證身份的頁面時,你都會把這個JWT帶給網(wǎng)站。

          • ? 網(wǎng)站收到JWT后,會驗證它的簽名以確保它是由網(wǎng)站簽發(fā)的,并且檢查其中的信息來確認(rèn)你的身份和權(quán)限。

          • ? 如果一切都通過了驗證,你就可以繼續(xù)訪問受保護(hù)的頁面了。

          為什么說JWT很爛?

          首先我們用JWT應(yīng)該就是去做這些事情:

          • ? 用戶注冊網(wǎng)站

          • ? 用戶登錄網(wǎng)站

          • ? 用戶點擊并執(zhí)行操作

          • ? 本網(wǎng)站使用用戶信息進(jìn)行創(chuàng)建、更新和刪除 信息

          這些事情對于數(shù)據(jù)庫的操作經(jīng)常是這些方面的

          • ? 記錄用戶正在執(zhí)行的操作

          • ? 將用戶的一些數(shù)據(jù)添加到數(shù)據(jù)庫中

          • ? 檢查用戶的權(quán)限,看看他們是否可以執(zhí)行某些操作

          之后我們來逐步說出他的一些缺點

          大小

          這個方面毋庸置疑。

          比如我們需要存儲一個用戶ID 為xiaou

          如果存儲到cookie里面,我們的總大小只有5個字節(jié)。

          如果我們將 ID 存儲在 一個 JWT 里。他的大小就會增加大概51倍

          這無疑就增大了我們的寬帶負(fù)擔(dān)。

          冗余簽名

          JWT的主要賣點之一就是其加密簽名。因為JWT被加密簽名,接收方可以驗證JWT是否有效且可信。

          但是,在過去20年里幾乎每一個網(wǎng)絡(luò)框架都可以在使用普通的會話cookie時獲得加密簽名的好處。

          事實上,大多數(shù)網(wǎng)絡(luò)框架會自動為你加密簽名(甚至加密!)你的cookie。這意味著你可以獲得與使用JWT簽名相同的好處,而無需使用JWT本身。

          實際上,在大多數(shù)網(wǎng)絡(luò)身份驗證情況下,JWT數(shù)據(jù)都是存儲在會話cookie中的,這意味著現(xiàn)在有兩個級別的簽名。一個在cookie本身上,一個在JWT上。

          令牌撤銷問題

          由于令牌在到期之前一直有效,服務(wù)器沒有簡單的方法來撤銷它。

          以下是一些可能導(dǎo)致這種情況危險的用例。

          注銷并不能真正使你注銷!

          想象一下你在推特上發(fā)送推文后注銷了登錄。你可能會認(rèn)為自己已經(jīng)從服務(wù)器注銷了,但事實并非如此。因為JWT是自包含的,將在到期之前一直有效。這可能是5分鐘、30分鐘或任何作為令牌一部分設(shè)置的持續(xù)時間。因此,如果有人在此期間獲取了該令牌,他們可以繼續(xù)訪問直到它過期。

          可能存在陳舊數(shù)據(jù)

          想象一下用戶是管理員,被降級為權(quán)限較低的普通用戶。同樣,這不會立即生效,用戶將繼續(xù)保持管理員身份,直到令牌過期。

          JWT通常不加密

          因此任何能夠執(zhí)行中間人攻擊并嗅探JWT的人都擁有你的身份驗證憑據(jù)。這變得更容易,因為中間人攻擊只需要在服務(wù)器和客戶端之間的連接上完成

          安全問題

          對于JWT是否安全。我們可以參考這個文章

          https://research.securitum.com/jwt-json-web-token-security/

          同時我們也可以看到是有專門的如何攻擊JWT的教程的

          https://www.freebuf.com/articles/web/375465.html

          總結(jié)

          總的來說,JWT適合作為單次授權(quán)令牌,用于在兩個實體之間傳輸聲明信息。

          但是,JWT不適合作為長期持久數(shù)據(jù)的存儲機(jī)制,特別是用于管理用戶會話。使用JWT作為會話機(jī)制可能會引入一系列嚴(yán)重的安全和實現(xiàn)上的問題,相反,對于長期持久數(shù)據(jù)的存儲,更適合使用傳統(tǒng)的會話機(jī)制,如會話cookie,以及建立在其上的成熟的實現(xiàn)。

          但是寫了這么多,我還是想說,如果你作為自己開發(fā)學(xué)習(xí)使用,不考慮安全,不考慮性能的情況下,用JWT是完全沒有問題的,但是一旦用到生產(chǎn)環(huán)境中,我們就需要避免這些可能存在的問題。

          來源:juejin.cn/post/7365533351451672612


          到此文章就結(jié)束了。Java架構(gòu)師必看一個集公眾號、小程序、網(wǎng)站(3合1的文章平臺,給您架構(gòu)路上一臂之力)。如果今天的文章對你在進(jìn)階架構(gòu)師的路上有新的啟發(fā)和進(jìn)步,歡迎轉(zhuǎn)發(fā)給更多人。歡迎加入架構(gòu)師社區(qū)技術(shù)交流群,眾多大咖帶你進(jìn)階架構(gòu)師,在后臺回復(fù)“加群”即可入群。



          這些年小編給你分享過的干貨


          0.ChatGPT 4o 國內(nèi)直接用 !!!

          1.idea2024.1.4永久激活碼(親測可用)

          2.優(yōu)質(zhì)ERP系統(tǒng)帶進(jìn)銷存財務(wù)生產(chǎn)功能(附源碼)

          3.優(yōu)質(zhì)SpringBoot帶工作流管理項目(附源碼)

          4.最好用的OA系統(tǒng),拿來即用(附源碼)

          5.SBoot+Vue外賣系統(tǒng)前后端都有(附源碼

          6.SBoot+Vue可視化大屏拖拽項目(附源碼)


          轉(zhuǎn)發(fā)在看就是最大的支持??

          瀏覽 83
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  男女AA免费视频 | 亚洲艾薇在线观看 | 国产精品久久久久久久久久久久久久久久久 | 91AV极品视觉盛宴 | 神马午夜亚洲 |