來源:https://blog.csdn.net/oscar999/article/details/102728303
JWT介紹
JWT概念
JWT , 全寫JSON Web Token, 是開放的行業標準RFC7591,用來實作端到端安全驗證.
簡單來說, 就是通過一些演算法對加密字串和JSON物件之間進行加解密,
JWT加密JSON,保存在客戶端,不需要在服務端保存會話資訊,,可以應用在前后端分離的用戶驗證上,后端對前端輸入的用戶資訊進行加密產生一個令牌字串, 前端再次請求時附加此字串,后端再使用演算法解密,
JWT流程:

JWT的構成
JWT字串:一段加密的JSON字串,
包含了三類資訊
- Header頭部:Token型別和加密演算法,加密演算法常見的有MD5、SHA、HMAC( Hash Message Authentication Code),
- PayLoad負載:存放有效資訊,包括
標準的宣告,類似開發語言總的關鍵字,包括
iss(Issuser) - 簽發者
sub Subject 面向主體
aud Audience 接收方
exp Expiration time 過期時間戳
nbf Not Before, 開始生效時間戳
iat(Issued at) 簽發時間
jti(JWT ID): 唯一標識
公共的宣告:一般添加業務相關的必要資訊,因為可解密,不建議敏感資訊,
私有的宣告:提供者和消費者共同定義的宣告,Base64對稱解密,不建議敏感資訊
Signature簽證
簽證資訊包括三部分:
Base64加密的header
Base64加密的payload
secret-密鑰 使用header中宣告的加密演算法對Header和payload的加密連接字串進行加鹽secret組合加密,密鑰保存在服務端,服務端根據密鑰進行解密驗證,
JWT與開發語言
JWT只是一個標準 可以通過不過的開發語言實作,包括Java,.NET, Python,Node Js, JavaScript,Perl, Ruby,Go等,同一種語言,不同的開發者提供了多種實作庫,以Java語言為例有java-jwt、?jose4j、nimbus-jose-jwt、jjwt
JWT官網
https://jwt.io/
這個網站提供了在線的基于不同演算法的字串和JSON物件的轉換工具,同時也收集了不同語言的多種實作庫,
java-jwt
java-jwt是Java語言中推薦的JWT實作庫,使用Maven匯入如下:
<dependency>
<groupId>com.auth0</groupId>
<artifactId>java-jwt</artifactId>
<version>3.8.3</version>
</dependency>
產生加密Token
String token = JWT.create()
.withExpiresAt(newDate(System.currentTimeMillis())) //設定過期時間
.withAudience("user1") //設定接受方資訊,一般時登錄用戶
.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.1,000+ 道 Java面試題及答案整理(2022最新版)
2.勁爆!Java 協程要來了,,,
3.Spring Boot 2.x 教程,太全了!
4.20w 程式員紅包封面,快快領取,,,
5.《Java開發手冊(嵩山版)》最新發布,速速下載!
覺得不錯,別忘了隨手點贊+轉發哦!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/424868.html
標籤:Java
