?
落霞與孤鶩齊飛, 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等各大平臺同步上線,敬請期待關注,歡迎洽談合作相關事宜。