为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕尼黑8549860 2023-05-24 14:59:07
我不想使用密钥(我没有)验证 JWT,我只想解码 JWT 并读取有效负载。这可以使用 jsonwebtoken.io:jjwt 来实现吗?API 中似乎缺少一种方法。当然,我可以自己对令牌进行拆分和 Base64 解码,但感觉就像是 JWT 库所期望的最基本的功能;因此我怀疑我遗漏了什么。
查看完整描述

3 回答

?
料青山看我应如是

TA贡献1772条经验 获得超8个赞

试试下面的代码:


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,我想这和你面临的是一样的。



查看完整回答
反对 回复 2023-05-24
?
ITMISS

TA贡献1871条经验 获得超8个赞

也许改用 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


查看完整回答
反对 回复 2023-05-24
?
慕村225694

TA贡献1880条经验 获得超4个赞

如果您可以使用其他库,则可以在此处作为可接受的答案完成:How to decode JWT token to get details of Header and Payload using nimbus-jose-jwt?


在这里重复答案:

依赖: com.nimbusds:nimbus-jose-jwt:<version>

用法:

/**

 * accessToken: the JWT string text.

**/

private String parseJWT(String accessToken) {

    try {

        var decodedJWT = SignedJWT  // or PlainJWT or EncryptedJWT

                           .parse(accessToken);

        var header = decodedJWT.getHeader().toString();

        var payload = decodedJWT.getPayload().toString();

    } catch (ParseException e) {

        throw new Exception("Invalid token!");

    }

}


查看完整回答
反对 回复 2023-05-24
  • 3 回答
  • 0 关注
  • 156 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信