?
落霞與孤鶩齊飛, JWT與Session兩種驗證機(jī)制的比較
大家好,這一期呢,我們來說一下網(wǎng)絡(luò)程序開發(fā)中的驗證的方式。常用的就是兩種:jwt和session,現(xiàn)在來比較一下的這兩種驗證方式。
先來探討一下這jwt的驗證方式。這種方式就是在服務(wù)器端和客戶端通過一個jwt token來保證通信的合法性。
在這個jwt token中你可以保存一些數(shù)據(jù)。要想看到這個token中存在哪些數(shù)據(jù),你可以去這個jwt io網(wǎng)站上去查一下。里面的數(shù)據(jù)是成對的,有一個鍵值,有一個對應(yīng)的值。
一個jwt token中,存在三個部分, 第1部分是頭部, 用來存放算法和類型。第2部分是數(shù)據(jù)部分, 我們大部分時間會用到這一部分。第3部分是簽名信息。
下面我們來看一下session的方式。Session的關(guān)鍵就是一個section ID。服務(wù)器端通過這個session ID來驗證通訊的合法性。同時使用這個session ID來獲取相應(yīng)的信息。
這些信息可能是在內(nèi)存中的數(shù)據(jù)信息, 也可能是在數(shù)據(jù)庫表中,也有可能在其他的緩沖機(jī)制里面。
在大型項目中一般比較常用的就是像redis這樣子的緩沖機(jī)制。在這個機(jī)制中會有一個redis的服務(wù)程序,有多個server,會有一個load balancer 負(fù)載均衡器, 這個負(fù)載均衡器作為與客戶端進(jìn)行交互的前沿??蛻舳烁?fù)載均衡器之間通過session ID來進(jìn)行交互。
現(xiàn)在來討論一下這兩種機(jī)制的好處和壞處。
jwt機(jī)制是無狀態(tài)的。在這種機(jī)制下,你不需要單獨的存放任何與你的訪問狀態(tài)相關(guān)的數(shù)據(jù)。這些東西都在一個token里面。
這種機(jī)制的好處就是使程序更加簡單。你不需要用額外的程序邏輯來管理通信狀態(tài)。
壞處就是數(shù)據(jù)是公開的,你只要拿到這個token,你就可以查到里面的數(shù)據(jù)。
另一個不好的地方是,如果token中你包含的數(shù)據(jù)太多,在通信過程中每次都要傳送這些數(shù)據(jù)會增加網(wǎng)絡(luò)交互的負(fù)擔(dān)。
Jwt token, 你可以通過設(shè)置至一個超時值來讓它失效。在它有效的這個時間里,除非你更改secret, 除此之外你是沒有辦法把它取消的。
Session機(jī)制是有狀態(tài)的。在通訊傳輸?shù)倪^程中,你只需要傳送一個session ID就可以了。與這個session相關(guān)的數(shù)據(jù)會在服務(wù)器端有一個備份。當(dāng)然客戶端也有一個備份, 因為你需要這部分?jǐn)?shù)據(jù)去做一些前端的操作。
這種機(jī)制的好處就是安全。在傳授的過程中,你只需要傳輸一個session ID, 不需要傳送全部的數(shù)據(jù)信息。具體的數(shù)據(jù),由你的請求類型來決定。
這種機(jī)制的壞處就是要額外去管理這部分通訊狀態(tài)數(shù)據(jù)。對于我們程序來說,就要單獨寫相關(guān)的數(shù)據(jù)庫表格來存放session部分,要寫相關(guān)的程序來讀取和更新這些數(shù)據(jù)。
在安全性上session有更好的優(yōu)勢。你可以刪除服務(wù)器端的session數(shù)據(jù)。
具體到某個開發(fā)項目上這兩種機(jī)制有優(yōu)勢也有劣勢,不能一概而論,還是要具體問題具體分析。
作者簡介:
山東人。
從事軟件開發(fā)研究二十多年。
先后在如下地區(qū)工作:山東(青鳥華光),北京(北大方正,SDL Trados, O2Micro, Motorola),德國斯圖加特(Trados),新加坡(ITE),加拿大溫哥華(Schneider Electric, Nokia Here, Western Digital, Microsoft, Aviso Wealth, MDA),現(xiàn)居溫哥華。
個人愛好:陪孩子玩耍學(xué)習(xí),練拳,好好學(xué)習(xí),天天向上。
專家領(lǐng)域:
安卓(Java,Kotlin),iOS(Swift),
Angular(Typescript,Javascript),
Asp.Net Core(C#),
Spring Boot(Java),
nodejs(Javascript),
Go(golang)
歡迎關(guān)注一起學(xué)習(xí)討論,共同進(jìn)步。
十年內(nèi)計劃寫出超過三千六百篇文章,與超過三萬名讀者互動。
這些文章會在今日頭條,知乎,簡書,微博,微信公眾平臺,阿里大魚號,Medium等各大平臺同步上線,敬請期待關(guān)注,歡迎洽談合作相關(guān)事宜。