java-jwt這個庫沒用過吧?
點擊關(guān)注公眾號,Java干貨及時送達??

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

JWT的構(gòu)成
JWT字符串:一段加密的JSON字符串。
包含了三類信息
Header頭部:Token類型和加密算法。加密算法常見的有MD5、SHA、HMAC( Hash Message Authentication Code)。
PayLoad負載:存放有效信息,包括
標(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)識
公共的聲明:一般添加業(yè)務(wù)相關(guān)的必要信息,因為可解密,不建議敏感信息。
私有的聲明:提供者和消費者共同定義的聲明,Base64對稱解密,不建議敏感信息
Signature簽證
簽證信息包括三部分:
Base64加密的header
Base64加密的payload
secret-密鑰 使用header中聲明的加密算法對Header和payload的加密連接字符串進行加鹽secret組合加密。密鑰保存在服務(wù)端,服務(wù)端根據(jù)密鑰進行解密驗證。
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.auth0groupId>
?<artifactId>java-jwtartifactId>
?<version>3.8.3version>
dependency>
產(chǎn)生加密Token
String?token?=?JWT.create()
????????????.withExpiresAt(newDate(System.currentTimeMillis()))??//設(shè)置過期時間
???????????.withAudience("user1")?//設(shè)置接受方信息,一般時登錄用戶
??????????.sign(Algorithm.HMAC256("111111"));??//使用HMAC算法,111111作為密鑰加密
解密Token獲取負載信息并驗證Token是否有效
String?userId?=?JWT.decode(token).getAudience().get(0);
????Assertions.assertEquals("user1",?userId);
????JWTVerifier?jwtVerifier?=?JWT.require(Algorithm.HMAC256("111111")).build();
????jwtVerifier.verify(token);?????????????
1.?我這樣寫代碼,比直接使用 MyBatis 效率提高了 100 倍 ?
最近面試BAT,整理一份面試資料《Java面試BATJ通關(guān)手冊》,覆蓋了Java核心技術(shù)、JVM、Java并發(fā)、SSM、微服務(wù)、數(shù)據(jù)庫、數(shù)據(jù)結(jié)構(gòu)等等。
獲取方式:點“在看”,關(guān)注公眾號并回復(fù)?Java?領(lǐng)取,更多內(nèi)容陸續(xù)奉上。
文章有幫助的話,在看,轉(zhuǎn)發(fā)吧。
謝謝支持喲 (*^__^*)

