在程序中獲得 JWT 的Token 代碼後,可以對 JWT 進行解碼。
常用的可以使用 OAuth0 提供的解碼包,你也可能會使用 nimbus-jose-jwt 包。
Maven 配置參數為:
<dependency>
<groupId>com.nimbusds</groupId>
<artifactId>nimbus-jose-jwt</artifactId>
<version>9.0.1</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 = "eyJ0eXAiOiJKV1QiLC"; //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