當前位置:網站首頁>關於jwt的一些補充學習

關於jwt的一些補充學習

2022-05-13 07:19:28optimistic丶中

去年的時候做過一個仿商城項目,在開發用戶登陸以及後續需要用到用戶數據的功能的時候,發現每次啟動服務器,session都會清空,因此想到用瀏覽器本地的cookie數據存儲,查閱資料的時候發現了JWT,當時就是把其當做一個簽名算法,只是為了提高數據的安全性,因此當時的學習主要是學會它怎麼在項目中使用,因此當時很多學習是跟著網上的博客進行,比如在搜索其實現demo的時候,直接複制它們的maven依賴,並且照著其demo照猫畫虎,改一下簽名密鑰和算法、body的數據以及token的生成和有效時間,當時還記得因為學到把jwt的加密和解密操作單獨封裝到一個類JWTUtils裏做解耦,自己還開心了蠻久,當然理論相關也學了,比如去jwt.io網站看了其分為三部分:
(1)Header,是描述JWT的元數據,其中alg字段錶示用的加密算法,默認是HS256,typ字段錶示令牌的類型。
(2)Payload,裏面存放的是實際需要傳遞的數據。
(3)Signature,裏面的值就是針對前兩部分使用指定算法簽名生成
在這裏插入圖片描述
除此之外,當時還了解到了 JOSE 、JWS、JWE、JWA、JWK,還記得 RS256 簽名算法的公鑰是 jwt.io 網站去請求 iss/.well-known/jwks.json 獲取到的。
在這裏插入圖片描述
但當時的學習僅僅到這裏就結束了,後面關於登錄相關功能還和SA-TOKEN學過一點。
但是今天我在看牛客網的時候,發現了有條關於JWT的帖子裏寫到了去JWT官網找類庫依賴坐標,想到我之前只是從博客簡單複制,然後就想著去官網看看,這樣也許對過程會更明白一點。
在這裏插入圖片描述

當我在官網找依賴的時候,我才發現,原來對於JAVA有六種不同的類庫實現

在這裏插入圖片描述
對於上述描述的字段,左邊中,Sign錶示是否支持簽名,Verify錶示是否支持驗簽,下面七個是JWT的payload字段,錶示是否支持其字段:
(1)iss (issuer):發布者
(2)sub (subject):主題
(3)aud (audience):觀眾,相當於接受者
(4)exp (expiration time):簽名過期時間
(5)nbf (Not Before):生效時間
(6)iat (Issued At):生成簽名的時間
(7)jti (JWT ID):編號
對於最後一個typ,我的理解是header的字段,這個一般都是JWT,看上面都不支持,所以這個字段應該是不能修改的。
右邊錶示支持的加密算法
其實單從圖來看,我認為jose4j是支持最全的,不過據我目前了解到的,網上博客基本都是推薦java-jwt和jjwt,不過我也有看到推薦nimbusds-jose-jwt的,理由是可以根據oidc規範配置遠程公鑰地址,具體的很多細節我還沒有接觸到,由於即將畢業的學業壓力,這一部分目前學習性價比太低,並且具體的時候如果以後到了公司裏做項目,還是得根據公司團隊要求來,所以今天先記錄一下,以後有時間了回來再繼續看。

版權聲明
本文為[optimistic丶中]所創,轉載請帶上原文鏈接,感謝
https://cht.chowdera.com/2022/133/202205130601066391.html

隨機推薦