落霞與孤鶩齊飛, JWT與Session兩種驗證機制的比較

?

落霞與孤鶩齊飛, JWT與Session兩種驗證機制的比較

大家好,這一期呢,我們來說一下網絡程序開發中的驗證的方式。常用的就是兩種:jwt和session,現在來比較一下的這兩種驗證方式。

先來探討一下這jwt的驗證方式。這種方式就是在服務器端和客戶端通過一個jwt token來保證通信的合法性。

在這個jwt token中你可以保存一些數據。要想看到這個token中存在哪些數據,你可以去這個jwt io網站上去查一下。里面的數據是成對的,有一個鍵值,有一個對應的值。

一個jwt token中,存在三個部分, 第1部分是頭部, 用來存放算法和類型。第2部分是數據部分, 我們大部分時間會用到這一部分。第3部分是簽名信息。

下面我們來看一下session的方式。Session的關鍵就是一個section ID。服務器端通過這個session ID來驗證通訊的合法性。同時使用這個session ID來獲取相應的信息。

這些信息可能是在內存中的數據信息, 也可能是在數據庫表中,也有可能在其他的緩沖機制里面。

在大型項目中一般比較常用的就是像redis這樣子的緩沖機制。在這個機制中會有一個redis的服務程序,有多個server,會有一個load balancer 負載均衡器, 這個負載均衡器作為與客戶端進行交互的前沿。客戶端跟負載均衡器之間通過session ID來進行交互。

現在來討論一下這兩種機制的好處和壞處。

jwt機制是無狀態的。在這種機制下,你不需要單獨的存放任何與你的訪問狀態相關的數據。這些東西都在一個token里面。

這種機制的好處就是使程序更加簡單。你不需要用額外的程序邏輯來管理通信狀態。

壞處就是數據是公開的,你只要拿到這個token,你就可以查到里面的數據。

另一個不好的地方是,如果token中你包含的數據太多,在通信過程中每次都要傳送這些數據會增加網絡交互的負擔。

Jwt token, 你可以通過設置至一個超時值來讓它失效。在它有效的這個時間里,除非你更改secret, 除此之外你是沒有辦法把它取消的。

Session機制是有狀態的。在通訊傳輸的過程中,你只需要傳送一個session ID就可以了。與這個session相關的數據會在服務器端有一個備份。當然客戶端也有一個備份, 因為你需要這部分數據去做一些前端的操作。

這種機制的好處就是安全。在傳授的過程中,你只需要傳輸一個session ID, 不需要傳送全部的數據信息。具體的數據,由你的請求類型來決定。

這種機制的壞處就是要額外去管理這部分通訊狀態數據。對于我們程序來說,就要單獨寫相關的數據庫表格來存放session部分,要寫相關的程序來讀取和更新這些數據。

在安全性上session有更好的優勢。你可以刪除服務器端的session數據。

具體到某個開發項目上這兩種機制有優勢也有劣勢,不能一概而論,還是要具體問題具體分析。

作者簡介:

山東人。

從事軟件開發研究二十多年。

先后在如下地區工作:山東(青鳥華光),北京(北大方正,SDL Trados, O2Micro, Motorola),德國斯圖加特(Trados),新加坡(ITE),加拿大溫哥華(Schneider Electric, Nokia Here, Western Digital, Microsoft, Aviso Wealth, MDA),現居溫哥華。

個人愛好:陪孩子玩耍學習,練拳,好好學習,天天向上。

專家領域:

安卓(Java,Kotlin),iOS(Swift),

Angular(Typescript,Javascript),

Asp.Net Core(C#),

Spring Boot(Java),

nodejs(Javascript),

Go(golang)

歡迎關注一起學習討論,共同進步。

十年內計劃寫出超過三千六百篇文章,與超過三萬名讀者互動。

這些文章會在今日頭條,知乎,簡書,微博,微信公眾平臺,阿里大魚號,Medium等各大平臺同步上線,敬請期待關注,歡迎洽談合作相關事宜。

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容