解决 Signed Claims JWSs are not supported. 异常

在使用 JWT 进行认证和授权时,有时候可能会遇到 "io.jsonwebtoken.UnsupportedJwtException: Signed Claims JWSs are not supported." 异常。本文将介绍该异常的原因以及如何解决它。

原因

这个异常是由于使用了签名的 JWT(JWS),而 io.jsonwebtoken 库不支持这种方式导致的。当使用 parseClaimsJwt 方法解析带有签名的 JWT 时,它将忽略签名并且返回包含荷载(payload)的 Claims 对象。这会导致验证 JWT 的签名失败,并抛出异常。

解决方法

使用 parseClaimsJws 方法代替 parseClaimsJwt 方法,即可解决

private Claims getClaimsFormToken(String token) {
    Claims claims = null;
    try {
        claims = Jwts.parser()
            .setSigningKey(secret)
            // 将 parseClaimsJwt 替换为 parseClaimsJws
            .parseClaimsJws(token) 
            .getBody();
    }catch (Exception e){
        e.printStackTrace();
    }
    return claims;
}

parseClaimsJws 与 parseClaimsJwt 的异同

  • 相同
    • parseClaimsJwtparseClaimsJws 两个方法的作用是一样的,都是解析 JWT 载荷并返回一个 Claims 对象。
  • 不同
    • parseClaimsJwt 方法适用于未签名的 JWT。
    • parseClaimsJws 方法适用于带有 JWS 签名的 JWT。
  • 应用场景:据所使用的 JWT 类型选择正确的方法来解析它
    • 如果您使用的是带有 JWS 签名的 JWT,则必须使用 parseClaimsJws 方法才能正确解析 JWT 并验证签名。
    • 如果使用的是未签名的 JWT,则可以使用 parseClaimsJwt 方法;

  • 12
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值