DefaultJwtParser:如何仅解码JWT? (没有密钥,没有验证)

时间:2019-08-08 08:48:20

标签: java jwt jjwt

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

当然,我可以自己拆分&-Base64解码令牌,但是感觉就像人们希望从JWT库获得的最基本的功能;因此我怀疑我缺少了一些东西。

2 个答案:

答案 0 :(得分:1)

尝试以下代码:

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,我想这与您面临的情况相同。

答案 1 :(得分: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