JWT 使用 nimbus-jose-jwt 進行解碼


在程序中獲得 JWT 的Token 代碼后,可以對 JWT 進行解碼。

常用的可以使用 OAuth0 提供的解碼包,你也可能會使用 nimbus-jose-jwt 包。

Maven 配置參數為:

<dependency> <groupId>com.nimbusds</groupId> <artifactId>nimbus-jose-jwt</artifactId> <version>8.19</version> </dependency> 

首先你需要有准確可以解碼的 JWT。

然后將這個 JWT 轉換為 SignedJWT

SignedJWT sjwt = SignedJWT.parse(token); 

然后你可以使用下面的代碼獲得所有的 claims。nimbus-jose-jwt 返回的結果是 set。隨后你就可以根據返回的 Set 去查詢你需要的內容了。

請注意,有時候返回的內容可能是不同的數據格式,你可能需要轉換。

比如說我們這里是 roles,nimbus-jose-jwt 返回的是 JSONArray。

如果你不能確定返回的 set 存儲的是什么數據類型,你可以使用 IJ 的調試窗口看看,就知道怎么去定義數據類型了。

 

 

如這個例子,我們使用的 JWT 通過查看為下面的情況。

 

 

我們需要返回 roles 的結構,因此我們需要轉換為 JSONArray 數據類型。

完整的測試代碼為:

    @Test public void claimsValueTest() { String token = "eyJ0eXAiOiJKV1Qi"; // Change your Token try { SignedJWT sjwt = SignedJWT.parse(token); JWTClaimsSet claims = sjwt.getJWTClaimsSet(); JSONArray groups = (JSONArray) claims.getClaim("roles"); logger.debug("roles - {}", groups.toJSONString()); } catch (Exception e) { e.printStackTrace(); } } 

上面的測試代碼,將會有下面的輸出內容:

17:43:24.431 [main] DEBUG com.ossez.jwt.JWTTest - roles - ["3343f157-c768-4b31-95ad-3f81487914d1","0e287 

請參考 GitHub 中的內容:https://github.com/cwiki-us-demo/java-tutorials/blob/1881848ff1c90d7beaa52b662fbb6c9e5c81aa53/core-java-modules/core-java-io/src/test/java/com/ossez/jwt/JWTTest.java

 

https://www.ossez.com/t/jwt-nimbus-jose-jwt/593

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM