【问题标题】:DefaultJwtParser: how to merely decode the JWT? (no secret key, no validation)DefaultJwtParser:如何仅解码 JWT? (没有密钥,没有验证)
【发布时间】:2019-12-15 22:20:21
【问题描述】:

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

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

【问题讨论】:

    标签: java jwt jjwt


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      试试下面的代码:

      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,我猜这和你所面对的一样。

      【讨论】:

      • 至于解决方法,我已经有了。您的回答清楚地表明该库实际上(并且故意)不提供该功能。
      猜你喜欢
      • 2021-12-01
      • 2022-09-23
      • 2019-06-04
      • 2012-01-15
      • 2020-09-04
      • 1970-01-01
      • 2013-12-26
      • 2018-09-10
      • 1970-01-01
      相关资源
      最近更新 更多