Mirth生成JWT提交OAuth2服务报错,jwt.io验证签名无效求助
问题排查点
- 密钥格式不匹配
你当前用到的PKCS8EncodedKeySpec仅支持PKCS#8编码的私钥,默认openssl生成的RSA私钥多为PKCS#1格式(头部标识为-----BEGIN RSA PRIVATE KEY-----),和要求的格式不符。你可以执行以下命令将现有私钥转为PKCS#8格式:
openssl pkcs8 -topk8 -inform PEM -outform PEM -nocrypt -in privatekey.pem -out privatekey_pkcs8.pem
转换后的私钥头部标识为-----BEGIN PRIVATE KEY-----,才可被Java密钥规范正常解析。
- 私钥内容处理错误
你代码中仅提到移除私钥头部,实际处理时还需要完整移除尾部标识(如-----END PRIVATE KEY-----),同时删除所有换行符、空格等额外字符,再进行base64解码,否则解码后的字节序列错误会直接导致签名异常。 - 密钥工厂未正确初始化
你给出的代码片段未包含keyFac的初始化逻辑,必须在生成私钥前指定匹配的算法,例如使用RS256签名时需要提前执行:
keyFac = Packages.java.security.KeyFactory.getInstance("RSA");
未初始化或算法指定错误都会生成无效的私钥对象。
- JWT编码与算法不匹配
- JWT的头部、载荷必须使用Base64URL编码,而非普通Base64:需要将
+替换为-、/替换为_、删除末尾填充的=,否则签名输入内容和标准不符会导致验证失败 - 确保JWT头部
alg字段声明的算法,和你实际签名使用的算法完全一致
- jwt.io验证公钥格式错误
你生成的publickey509.pem是X.509格式证书,粘贴到jwt.io公钥框时需要保留完整的-----BEGIN CERTIFICATE-----、-----END CERTIFICATE-----标识,不要自行删除头尾,否则jwt.io无法正确解析公钥。
内容的提问来源于stack exchange,提问作者jc84
相关产品推荐
相关产品推荐

