JWT 和 JJWT,別再傻傻分不清了!

JWT 和 JJWT,別再傻傻分不清了!

jwt是什麼?

JWTs是JSON物件的編碼表示。JSON物件由零或多個名稱/值對組成,其中名稱為字串,值為任意JSON值。

JWT有助於在clear(例如在URL中)傳送這樣的資訊,可以被信任為不可讀(即加密的)、不可修改的(即簽名)和URL - safe(即Base64編碼的)。

jwt的組成

Header: 標題包含了令牌的元資料,並且在最小包含簽名和/或加密演算法的型別

Claims: Claims包含您想要簽署的任何資訊

JSON Web Signature (JWS): 在header中指定的使用該演算法的數字簽名和宣告

例如:

加密生成的token:

JWT 和 JJWT,別再傻傻分不清了!

圖片

如何保證 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

結構圖

JWT 和 JJWT,別再傻傻分不清了!

圖片

Maven 引進 : pom。xml

WebApplication。java

JwtFilter。java

UserController。java

ApiController。java

index。html

app。js

執行應用

JWT 和 JJWT,別再傻傻分不清了!

圖片

效果

圖片圖片

版權宣告:本文為CSDN博主「J_小浩子」的原創文章,遵循CC 4。0 BY-SA版權協議,轉載請附上原文出處連結及本宣告。

最近面試BAT,整理一份面試資料《

Java面試BATJ通關手冊

》,覆蓋了Java核心技術、JVM、Java併發、SSM、微服務、資料庫、資料結構等等。

文章有幫助的話,在看,轉發吧。

謝謝支援喲 (*^__^*)

TAG: shausingJWT簽名RSASSA