Quarkus SmallRye JWT生成令牌报SRJWT05021错误如何解决?
问题根因
SmallRye JWT生成签名JWT时,需要显式配置签名所用私钥的路径。你当前配置中的mp.jwt.decrypt.key.location是用于解密JWE加密令牌的配置项,不适用于JWS签名场景,因此触发SRJWT05021报错。
解决步骤
- 确认你的
privateKey.pem私钥文件已存放在项目src/main/resources目录下 - 修改
application.properties配置,新增签名私钥路径配置,删除无用的解密密钥配置:
quarkus.http.cors=true quarkus.http.cors.origins=* quarkus.smallrye-jwt.enabled=true mp.jwt.verify.publickey=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAlivFI8qB4D0y2jy0CfEqFyy46R0o7S8TKpsx5xbHKoU1VWg6QkQm+ntyIv1p4kE1sPEQO73+HY8+Bzs75XwRTYL1BmR1w8J5hmjVWjc6R2BTBGAYRPFRhor3kpM6ni2SPmNNhurEAHw7TaqszP5eUF/F9+KEBWkwVta+PZ37bwqSE4sCb1soZFrVz/UT/LF4tYpuVYt3YbqToZ3pZOZ9AX2o1GCG3xwOjkc4x0W7ezbQZdC9iftPxVHR8irOijJRRjcPDtA6vPKpzLl6CyYnsIYPd99ltwxTHjr3npfv/3Lw50bAkbT4HeLFxTx4flEoZLKO/g0bAoV2uqBhkA9xnQIDAQAB mp.jwt.verify.issuer=https://example.com/issuer # 新增JWT签名用私钥配置,替换原有错误的解密密钥配置 smallrye.jwt.sign.key.location=privateKey.pem
- 若你的私钥设置了访问密码,额外新增如下配置:
smallrye.jwt.sign.key.password=你的私钥密码
- 若私钥为PKCS#1格式,需要先转换为Quarkus支持的PKCS#8格式,转换命令如下:
openssl pkcs8 -topk8 -nocrypt -in privateKey.pem -out privateKey_pkcs8.pem
转换完成后将配置中的私钥文件名修改为转换后的privateKey_pkcs8.pem即可。
5. 可选优化:生成JWT时添加过期时间,避免令牌永久有效:
@ApplicationScoped public class JwtGen { public String gen() { String token = Jwt.upn("arthur") .groups(new HashSet<>(Arrays.asList("User"))) // 有效期设置为3600秒(1小时) .expiresIn(3600) .sign(); return token; } }
内容的提问来源于stack exchange,提问作者kinzkowski
相关产品推荐
相关产品推荐

