在程序中獲得 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
https://www.ossez.com/t/jwt-nimbus-jose-jwt/593