JWT 使用 nimbus-jose-jwt 进行解码

在程序中获得 JWT 的Token 代码后 , 可以对 JWT 进行解码 。
常用的可以使用 OAuth0 提供的解码包 , 你也可能会使用 nimbus-jose-jwt 包 。
Maven 配置参数为:
com.nimbusdsnimbus-jose-jwt8.19首先你需要有准确可以解码的 JWT 。
然后将这个 JWT 转换为 SignedJWT
SignedJWT sjwt = SignedJWT.parse(token);然后你可以使用下面的代码获得所有的 claims 。 nimbus-jose-jwt 返回的结果是 set 。 随后你就可以根据返回的 Set 去查询你需要的内容了 。
请注意 , 有时候返回的内容可能是不同的数据格式 , 你可能需要转换 。
比如说我们这里是 roles , nimbus-jose-jwt 返回的是 JSONArray 。
如果你不能确定返回的 set 存储的是什么数据类型 , 你可以使用 IJ 的调试窗口看看 , 就知道怎么去定义数据类型了 。
JWT 使用 nimbus-jose-jwt 进行解码文章插图
JWT-bus-01476×588 24.4 KB
如这个例子 , 我们使用的 JWT 通过查看为下面的情况 。
JWT 使用 nimbus-jose-jwt 进行解码文章插图
JWT-bus-021265×931 174 KB
我们需要返回 roles 的结构 , 因此我们需要转换为 JSONArray 数据类型 。
完整的测试代码为:
@Testpublic void claimsValueTest() {String token = "eyJ0eXAiOiJKV1Qi"; // Change your Tokentry {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();}}上面的测试代码 , 将会有下面的输出内容:
【JWT 使用 nimbus-jose-jwt 进行解码】17:43:24.431 [main] DEBUG com.ossez.jwt.JWTTest - roles - ["3343f157-c768-4b31-95ad-3f81487914d1","0e287