JWT與Session的比較

2022-03-26 11:37:01 字數 2296 閱讀 9734

如今,越來越多的專案開始採用jwt作為認證授權機制,那麼它和之前的session究竟有什麼區別呢?今天就讓我們來了解一下。

json web token(jwt)是乙個開放標準(rfc 7519),它定義了一種緊湊和自包含的方式,用於在各方之間作為json物件安全地傳輸資訊。作為標準,它沒有提供技術實現,但是大部分的語言平台都有按照它規定的內容提供了自己的技術實現,所以實際在用的時候,只要根據自己當前專案的技術平台,到官網上選用合適的實現庫即可。

使用jwt來傳輸資料,實際上傳輸的是乙個字串,這個字串就是所謂的json web token字串。所以廣義上,jwt是乙個標準的名稱;狹義上,jwt指的就是用來傳遞的那個token字串。這個串有兩個特點:

緊湊:指的是這個串很小,能通過url 引數,http 請求提交的資料以及http header的方式來傳遞;

自包含:這個串可以包含很多資訊,比如使用者的id、角色等,別人拿到這個串,就能拿到這些關鍵的業務資訊,從而避免再通過資料庫查詢等方式才能得到它們。

它由三部分組成:header(頭部)、payload(載荷)、signature(簽名),以.進行分割。(這個字串本來是只有一行的,此處分成3行,只是為了區分其結構)

header用來宣告型別(typ)和演算法(alg)。

payload一般存放一些不敏感的資訊,比如使用者名稱、許可權、角色等。

signature則是將headerpayload對應的json結構進行base64url編碼之後得到的兩個串用英文句點號拼接起來,然後根據header裡面alg指定的簽名演算法生成出來的。

為什麼我們要把jwtsession做對比呢?因為我們主要在每一次請求的認證時會用jwt,在此之前我們都是用session的。那這兩者的區別在哪兒呢?

看了前面的介紹,我們發現jwt這個字串其實本身就包含了關於使用者的資訊,比如使用者名稱、許可權、角色等。

session傳遞的sessionid雖然是乙個更簡單的字串,但它本身並沒有任何含義。

所以一般說來jwt的字串要比sessionid長,如果你在jwt中儲存的資訊越長,那麼jwt本身也會越長。

cookie的儲存容量是有限制的(通常為4kb),所以大家在使用的時候需要注意。

jwt的header和payload其實是有json轉變過來的,而signature其實就是乙個加密後的字串,因此解析起來較為簡單,不需要其他輔助的內容。

sessionid是伺服器儲存的使用者物件的標識,理論上需要乙個額外的map才能找出當前使用者的資訊。

jwt理論上用於無狀態的請求,因此其使用者管理也只是依賴本身而已。我們一般是在它的payload中加入過期時間,在不增加額外管理的情況下,它只有自動過期的方式。

session因為它本就是儲存在伺服器端的,因此管理方案就有很多,而且大多都很成熟。

session的跨平台可能就不那麼好做了,需要考慮的地方在於使用者資訊儲存的格式,protobuf、json、xml等,管理的話可能就需要專門的統一登入平台,這個就不展開了。

無狀態jwt一旦被生成,就不會再和服務端有任何瓜葛。一旦服務端中的相關資料更新,無狀態jwt中儲存的資料由於得不到更新,就變成了過期的資料。

session就不一樣了,sessionid本身就沒有太多含義,只需修改服務端中儲存的資料即可。

jwt的最佳用途是一次性授權token,這種場景下的token的特性如下:

真實場景的例子——檔案託管服務,由兩部分組成:

如何把jwt用在這個場景中呢?

session比較適用於web應用的會話管理,其特點一般是:

Django之Session與JWT比較

session與jwt比較 目錄2.jwt介紹 1.1session使用原理 1.2session使用的缺點 1.3常用解決session方法 第二種 寫入資料庫或檔案持久層 2.1jwt原則 jwt的原則是在伺服器身份驗證之後,將生成乙個json物件並將其傳送回使用者 之後,當使用者與伺服器通訊時...

使用者認證 基於jwt和session的區別和優缺點

背景知識 authentication和authorization的區別 authentication 使用者認證,指的是驗證使用者的身份,例如你希望以小a的身份登入,那麼應用程式需要通過使用者名稱和密碼確認你真的是小a。由於http協議是無狀態的,每一次請求都無狀態。當乙個使用者通過使用者名稱和密...

無狀態session 解決方案 JWT

現在分布式微服務的逐漸使用廣泛,前後端分離已經成為網際網路專案開發標準,它會為以後的大型分布式架構打下基礎。為以後服務的橫向擴充套件提供了方便 json web tokens jwt 能提供基於json格式的安全認證。jwt可以跨不同語言,自帶身份資訊,並且非常容易傳遞。jwt即json web t...