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

JWT的構(gòu)成
JWT字符串: 一段加密的JSON字符串。
包含了三類(lèi)信息
- Header頭部: Token類(lèi)型和加密算法。加密算法常見(jiàn)的有MD5、SHA、HMAC( Hash Message Authentication Code)。
- PayLoad負(fù)載: 存放有效信息,包括
1.標(biāo)準(zhǔn)的聲明,類(lèi)似開(kāi)發(fā)語(yǔ)言總的關(guān)鍵字。包括
iss(Issuser) - 簽發(fā)者
sub Subject 面向主體
aud Audience 接收方
exp Expiration time 過(guò)期時(shí)間戳
nbf Not Before, 開(kāi)始生效時(shí)間戳
iat(Issued at) 簽發(fā)時(shí)間
jti(JWT ID): 唯一標(biāo)識(shí)
2.公共的聲明: 一般添加業(yè)務(wù)相關(guān)的必要信息,因?yàn)榭山饷埽唤ㄗh敏感信息。
3.私有的聲明:提供者和消費(fèi)者共同定義的聲明,Base64對(duì)稱(chēng)解密,不建議敏感信息
- Signature簽證
簽證信息包括三部分:
- Base64加密的header
- Base64加密的payload
- secret-密鑰
使用header中聲明的加密算法對(duì)Header和payload的加密連接字符串進(jìn)行加鹽secret組合加密。
密鑰保存在服務(wù)端,服務(wù)端根據(jù)密鑰進(jìn)行解密驗(yàn)證。
JWT與開(kāi)發(fā)語(yǔ)言
JWT只是一個(gè)標(biāo)準(zhǔn)
可以通過(guò)不過(guò)的開(kāi)發(fā)語(yǔ)言實(shí)現(xiàn),包括Java,.NET, Python,Node Js, JavaScript,Perl, Ruby,Go等。
同一種語(yǔ)言,不同的開(kāi)發(fā)者提供了多種實(shí)現(xiàn)庫(kù),以Java語(yǔ)言為例有java-jwt、?jose4j、nimbus-jose-jwt、jjwt
JWT官網(wǎng)
https://jwt.io/
這個(gè)網(wǎng)站提供了在線的基于不同算法的字符串和JSON對(duì)象的轉(zhuǎn)換工具,同時(shí)也收集了不同語(yǔ)言的多種實(shí)現(xiàn)庫(kù)。
java-jwt
java-jwt是Java語(yǔ)言中推薦的JWT實(shí)現(xiàn)庫(kù),使用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è)置過(guò)期時(shí)間
.withAudience("user1") //設(shè)置接受方信息,一般時(shí)登錄用戶
.sign(Algorithm.HMAC256("111111")); //使用HMAC算法,111111作為密鑰加密
解密Token獲取負(fù)載信息并驗(yàn)證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)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 深入了解java-jwt生成與校驗(yàn)
- Java中的JWT使用詳解
- java使用JWT的方法
- Java如何簡(jiǎn)單快速入門(mén)JWT(token生成與驗(yàn)證)
- 基于Java驗(yàn)證jwt token代碼實(shí)例
- Java如何使用JWT實(shí)現(xiàn)Token認(rèn)證機(jī)制
- 在Java中使用Jwt的示例代碼
- Java?JWT實(shí)現(xiàn)跨域身份驗(yàn)證方法詳解
- Java中JWT的使用的詳細(xì)教程
- 使用Java生成JWT令牌的示例代碼
- Java jwt使用公鑰字符串驗(yàn)證解析token鎖方法詳解
- java-jwt 使用小結(jié)
相關(guān)文章
IDEA中Web項(xiàng)目控制臺(tái)亂碼的問(wèn)題及解決方法
這篇文章主要介紹了IDEA中Web項(xiàng)目控制臺(tái)亂碼的問(wèn)題及解決方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-08-08
Spring源碼解析之循環(huán)依賴(lài)的實(shí)現(xiàn)流程
這篇文章主要介紹了Spring源碼解析之循環(huán)依賴(lài)的實(shí)現(xiàn)流程,文章基于Java的相關(guān)內(nèi)容展開(kāi)循環(huán)依賴(lài)的實(shí)現(xiàn)流程,需要的小伙伴可以參考一下2022-07-07
SpringBoot整合Mybatis,解決TypeAliases配置失敗的問(wèn)題
這篇文章主要介紹了SpringBoot整合Mybatis,解決TypeAliases配置失敗的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07
Java高級(jí)特性基礎(chǔ)之反射五連問(wèn)
反射賦予了我們?cè)谶\(yùn)行時(shí)分析類(lèi)以及執(zhí)行類(lèi)中方法的能力。通過(guò)反射你可以獲取任意一個(gè)類(lèi)的所有屬性和方法,你還可以調(diào)用這些方法和屬性。本文就來(lái)和大家詳細(xì)聊聊Java中的反射,感興趣的可以了解一下2023-01-01
mybatis如何設(shè)置useGeneratedKeys=true
這篇文章主要介紹了mybatis如何設(shè)置useGeneratedKeys=true,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。2022-01-01
Java實(shí)現(xiàn)簡(jiǎn)單的銀行管理系統(tǒng)的示例代碼
這篇文章主要介紹了如何利用Java實(shí)現(xiàn)簡(jiǎn)單的銀行管理系統(tǒng),可以實(shí)現(xiàn)存款,取款,查詢等功能,文中的示例代碼講解詳細(xì),感興趣的可以了解一下2022-09-09

