The verification key's size is 1024 bits which is not secure enough for the RS512 algorithm

JAVA 65 2022-08-03 14:06
这段时间在对接一个第三方系统,用户登录token使用JWT中的RS512加密,但是通过第三方接口获取到的公钥长度只有1024,由于JWT从0.10.0开始公私钥长度最低只能是2048,导致无法使用第三方的公钥进行解密,但是又不能让第三方重新生成公私钥,也不能更改token加密方式,并且自己的系统其他功能也有用到JWT0.10.0以上版本的功能,所以也无法把JWT版本降到0.10.0以下。
io.jsonwebtoken.security.WeakKeyException: The verification key's size is 1024 bits which is not secure enough for the RS512 algorithm.  The JWT JWA Specification (RFC 7518, Section 3.3) states that keys used with RS512 MUST have a size >= 2048 bits.  Consider using the io.jsonwebtoken.security.Keys class's 'keyPairFor(SignatureAlgorithm.RS512)' method to create a key pair guaranteed to be secure enough for RS512.  See https://tools.ietf.org/html/rfc7518#section-3.3 for more information.
只能自己重写JWT的DefaultJwtParser,新建一个类ZcDefaultJwtParser,代码直接从DefaultJwtParser拷贝过来,把parse方法中的校验代码algorithm.assertValidVerificationKey(key);直接去掉。
去掉图片中的红框代码

原来解析token代码如下
Claims claims = Jwts.parser().setSigningKey(publicKey).parseClaimsJws(token).getBody();
现在改成
Claims claims = new ZcDefaultJwtParser().setSigningKey(publicKey).parseClaimsJws(token).getBody();
文章评论