9

我不想使用密钥(我没有)验证 JWT,我只想解码 JWT 并读取有效负载。这可以使用 jsonwebtoken.io:jjwt 来实现吗?API 中似乎缺少一个方法。

当然,我可以自己对令牌进行拆分和 Base64 解码,但感觉就像人们期望从 JWT 库中获得的最基本功能一样;因此我怀疑我错过了一些东西。

4

2 回答 2

19

试试下面的代码:

int i = jws.lastIndexOf('.')
String withoutSignature = jws.substring(0, i+1);
Jwt<Header,Claims> untrusted = Jwts.parser().parseClaimsJwt(withoutSignature);

您可以在最后一个句点字符 ('.') 之后“砍掉”最后一个“部分”,这是 JWS 签名。然后将该 JWT 读取为“普通”JWT(非 JWS)。

您要求的是忽略有效 JWS 上的签名并读取 JWT 标头和正文。这违反了 JWS 规范,因此 JJWT 不支持它。

这是取自这个github issue,我想这和你所面临的一样。

于 2019-08-08T10:45:35.333 回答
0

也许改用 Auth0 库?

DecodedJWT jwt = JWT.decode(token);
jwt.getToken();

依赖项:

<dependency>
  <groupId>com.auth0</groupId>
  <artifactId>java-jwt</artifactId>
  <version>3.8.3</version>
</dependency>
<dependency>
  <groupId>com.auth0</groupId>
  <artifactId>jwks-rsa</artifactId>
  <version>0.9.0</version>
</dependency>

示例取自https://medium.com/trabe/validate-jwt-tokens-using-jwks-in-java-214f7014b5cf

于 2020-09-02T16:21:30.213 回答