JWT實際上是壹個字符串,由三部分組成,頭、負載和簽名。
報頭描述了關於JWT的最基本的信息,例如它的類型和用於簽名的算法。
例如{"type":"JWT "," alg":"HS256"}
其報頭表明簽名算法是HS256算法。
HMAC算法(不對稱)
SH256
南非共和國(Republic of South Africa)
負載是存儲有效信息的地方。
定義壹個有效負載:{"sub": "1234567890 "," name": "John Doe "," admin": true}
visa由三部分組成,base64加密的頭部和base64加密的有效載荷連接起來形成壹個字符串。
然後通過頭中聲明的加密方法進行鹽密組合加密。
1和jwt都是基於json的,解析起來非常方便。
2.令牌中可以定制豐富的內容,易於擴展。
3.通過非對稱加密算法和數字簽名技術,JWT可以防止篡改,具有很高的安全性。
4.利用JWT,資源服務可以不依賴認證服務完成授權。
JWT代幣很長,占用很大的存儲空間。
壹個公鑰對應壹個私鑰,私鑰作為簽名加密JWT,所以這裏需要生成對應的公鑰:
輸入密鑰庫密碼:?keytool-list-keystore Chang Gou . jks
顯示的信息是:
密鑰庫類型:jks
密鑰庫提供者:SUN
您的密鑰庫包含1個條目。
長溝2020-7-28 private key entry,
證書指紋(sha 1):45:2e:51:8b:84:86:03:8c:af:99:14:5f:4f:D6:98:33:39:92:33:79。
您可以在輸入以下命令後獲得公鑰:
備註:classPathResource:私鑰位置;
New KeyStoreKeyFactory:要創建私鑰工廠,需要兩個參數:私鑰存儲的密碼和私鑰的位置;
Keystorekeyfactory.getkeyPair(別名,password.tochararray):獲取keyPair對象,keyPair.getPrivate()是獲取私鑰;
根據私鑰獲取令牌:jwthelper . encode(JSON . tojsonstring(map,new RSA signer (RSA私鑰));