Java Jwt庫的簡介及使用詳解
JWT介紹
JWT概念
JWT , 全寫JSON Web Token, 是開放的行業(yè)標(biāo)準(zhǔn)RFC7591,用來實現(xiàn)端到端安全驗證.
簡單來說, 就是通過一些算法對加密字符串和JSON對象之間進(jìn)行加解密。
JWT加密JSON,保存在客戶端,不需要在服務(wù)端保存會話信息。,可以應(yīng)用在前后端分離的用戶驗證上,后端對前端輸入的用戶信息進(jìn)行加密產(chǎn)生一個令牌字符串, 前端再次請求時附加此字符串,后端再使用算法解密。
JWT流程:

JWT的構(gòu)成
JWT字符串: 一段加密的JSON字符串。
包含了三類信息
- Header頭部: Token類型和加密算法。加密算法常見的有MD5、SHA、HMAC( Hash Message Authentication Code)。
- PayLoad負(fù)載: 存放有效信息,包括
1.標(biāo)準(zhǔn)的聲明,類似開發(fā)語言總的關(guān)鍵字。包括
iss(Issuser) - 簽發(fā)者
sub Subject 面向主體
aud Audience 接收方
exp Expiration time 過期時間戳
nbf Not Before, 開始生效時間戳
iat(Issued at) 簽發(fā)時間
jti(JWT ID): 唯一標(biāo)識
2.公共的聲明: 一般添加業(yè)務(wù)相關(guān)的必要信息,因為可解密,不建議敏感信息。
3.私有的聲明:提供者和消費者共同定義的聲明,Base64對稱解密,不建議敏感信息
- Signature簽證
簽證信息包括三部分:
- Base64加密的header
- Base64加密的payload
- secret-密鑰
使用header中聲明的加密算法對Header和payload的加密連接字符串進(jìn)行加鹽secret組合加密。
密鑰保存在服務(wù)端,服務(wù)端根據(jù)密鑰進(jìn)行解密驗證。
JWT與開發(fā)語言
JWT只是一個標(biāo)準(zhǔn)
可以通過不過的開發(fā)語言實現(xiàn),包括Java,.NET, Python,Node Js, JavaScript,Perl, Ruby,Go等。
同一種語言,不同的開發(fā)者提供了多種實現(xiàn)庫,以Java語言為例有java-jwt、?jose4j、nimbus-jose-jwt、jjwt
JWT官網(wǎng)
https://jwt.io/
這個網(wǎng)站提供了在線的基于不同算法的字符串和JSON對象的轉(zhuǎn)換工具,同時也收集了不同語言的多種實現(xiàn)庫。
java-jwt
java-jwt是Java語言中推薦的JWT實現(xiàn)庫,使用Maven導(dǎo)入如下:
<dependency> <groupId>com.auth0</groupId> <artifactId>java-jwt</artifactId> <version>3.8.3</version> </dependency>
產(chǎn)生加密Token
String token = JWT.create()
.withExpiresAt(newDate(System.currentTimeMillis())) //設(shè)置過期時間
.withAudience("user1") //設(shè)置接受方信息,一般時登錄用戶
.sign(Algorithm.HMAC256("111111")); //使用HMAC算法,111111作為密鑰加密
解密Token獲取負(fù)載信息并驗證Token是否有效
String userId = JWT.decode(token).getAudience().get(0);
Assertions.assertEquals("user1", userId);
JWTVerifier jwtVerifier = JWT.require(Algorithm.HMAC256("111111")).build();
jwtVerifier.verify(token);
到此這篇關(guān)于JWT介紹以及java-jwt的使用的文章就介紹到這了,更多相關(guān)java jwt使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Spring源碼解析之循環(huán)依賴的實現(xiàn)流程
這篇文章主要介紹了Spring源碼解析之循環(huán)依賴的實現(xiàn)流程,文章基于Java的相關(guān)內(nèi)容展開循環(huán)依賴的實現(xiàn)流程,需要的小伙伴可以參考一下2022-07-07
SpringBoot整合Mybatis,解決TypeAliases配置失敗的問題
這篇文章主要介紹了SpringBoot整合Mybatis,解決TypeAliases配置失敗的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-07-07
mybatis如何設(shè)置useGeneratedKeys=true
這篇文章主要介紹了mybatis如何設(shè)置useGeneratedKeys=true,具有很好的參考價值,希望對大家有所幫助。2022-01-01
Java實現(xiàn)簡單的銀行管理系統(tǒng)的示例代碼
這篇文章主要介紹了如何利用Java實現(xiàn)簡單的銀行管理系統(tǒng),可以實現(xiàn)存款,取款,查詢等功能,文中的示例代碼講解詳細(xì),感興趣的可以了解一下2022-09-09

