jwt是什麼?
JWTs是JSON物件的編碼表示。JSON物件由零或多個名稱/值對組成,其中名稱為字串,值為任意JSON值。
JWT有助於在clear(例如在URL中)傳送這樣的資訊,可以被信任為不可讀(即加密的)、不可修改的(即簽名)和URL - safe(即Base64編碼的)。
jwt的組成
Header: 標題包含了令牌的元資料,並且在最小包含簽名和/或加密演算法的型別
Claims: Claims包含您想要簽署的任何資訊
JSON Web Signature (JWS): 在header中指定的使用該演算法的數字簽名和宣告
例如:
加密生成的token:
圖片
如何保證 JWT 安全
有很多庫可以幫助您建立和驗證JWT,但是當使用JWT時,仍然可以做一些事情來限制您的安全風險。在您信任JWT中的任何資訊之前,請始終驗證簽名。這應該是給定的。
換句話說,如果您正在傳遞一個秘密簽名金鑰到驗證簽名的方法,並且簽名演算法被設定為“none”,那麼它應該失敗驗證。
確保簽名的秘密簽名,用於計算和驗證簽名。秘密簽名金鑰只能由發行者和消費者訪問,不能在這兩方之外訪問。
不要在JWT中包含任何敏感資料。這些令牌通常是用來防止操作(未加密)的,因此索賠中的資料可以很容易地解碼和讀取。
如果您擔心重播攻擊,包括一個nonce(jti索賠)、過期時間(exp索賠)和建立時間(iat索賠)。這些在JWT規範中定義得很好。
圖片
jwt的框架:JJWT
JJWT是一個提供端到端的JWT建立和驗證的Java庫。永遠免費和開源(Apache License,版本2。0),JJWT很容易使用和理解。它被設計成一個以建築為中心的流暢介面,隱藏了它的大部分複雜性。
JJWT的目標是最容易使用和理解用於在JVM上建立和驗證JSON Web令牌(JWTs)的庫。
JJWT是基於JWT、JWS、JWE、JWK和JWA RFC規範的Java實現。
JJWT還添加了一些不屬於規範的便利擴充套件,比如JWT壓縮和索賠強制。
規範相容:
建立和解析明文壓縮JWTs
建立、解析和驗證所有標準JWS演算法的數字簽名緊湊JWTs(又稱JWSs):
HS256: HMAC using SHA-256
HS384: HMAC using SHA-384
HS512: HMAC using SHA-512
RS256: RSASSA-PKCS-v1_5 using SHA-256
RS384: RSASSA-PKCS-v1_5 using SHA-384
RS512: RSASSA-PKCS-v1_5 using SHA-512
PS256: RSASSA-PSS using SHA-256 and MGF1 with SHA-256
PS384: RSASSA-PSS using SHA-384 and MGF1 with SHA-384
PS512: RSASSA-PSS using SHA-512 and MGF1 with SHA-512
ES256: ECDSA using P-256 and SHA-256
ES384: ECDSA using P-384 and SHA-384
ES512: ECDSA using P-521 and SHA-512
這裡以github上的demo演示,理解原理,整合到自己專案中即可。
應用採用 spring boot + angular + jwt
結構圖
圖片
Maven 引進 : pom。xml
WebApplication。java
JwtFilter。java
UserController。java
ApiController。java
index。html
app。js
執行應用
圖片
效果
圖片圖片
版權宣告:本文為CSDN博主「J_小浩子」的原創文章,遵循CC 4。0 BY-SA版權協議,轉載請附上原文出處連結及本宣告。
最近面試BAT,整理一份面試資料《
Java面試BATJ通關手冊
》,覆蓋了Java核心技術、JVM、Java併發、SSM、微服務、資料庫、資料結構等等。
文章有幫助的話,在看,轉發吧。
謝謝支援喲 (*^__^*)