Quarkus中JWT调用innerSignAndEncrypt加密报密钥为空错误如何解决
Quarkus JWT加密报错
The key must not be null解决方案 根因说明
报错核心是Smallrye JWT(Quarkus内置JWT实现)没有成功加载你配置的加密/解密密钥,导致解密阶段密钥为空,按以下步骤排查修复:
检查密钥文件存放路径
你配置的是相对路径,需确保publicKey.pem和privateKey.pem均存放在项目src/main/resources目录下,否则Quarkus启动时无法读取对应文件,会静默返回null触发报错。校验密钥格式
测试用RSA密钥对需符合以下格式要求:- 公钥开头必须为
-----BEGIN PUBLIC KEY-----,不能是证书格式的-----BEGIN CERTIFICATE----- - 私钥如果是加密状态(开头为
-----BEGIN ENCRYPTED PRIVATE KEY-----),需要补充私钥密码配置
- 公钥开头必须为
补充缺失的必要配置
你当前仅配置了密钥路径,缺少加密算法的显式声明,Smallrye JWT默认不会自动选择加密算法,需在配置文件中新增以下内容:# 签名算法,和RSA密钥匹配即可,常用RS256 smallrye.jwt.sign.algorithm=RS256 # 密钥管理算法,RSA加密场景必须配置,常用RSA-OAEP-256 smallrye.jwt.encrypt.key.algorithm=RSA-OAEP-256 # 内容加密算法,常用A256GCM smallrye.jwt.encrypt.content.algorithm=A256GCM # 如果私钥有密码,补充以下两项配置 # smallrye.jwt.sign.key.password=你的私钥密码 # mp.jwt.decrypt.key.password=你的私钥密码修正API调用方式
Jwt.innerSignAndEncrypt是嵌套JWT场景专用API,普通签发加密+签名JWT直接调用以下方法即可:Jwt.claims(jsonObject).signAndEncrypt();
内容的提问来源于stack exchange,提问作者Victor
相关产品推荐
相关产品推荐

