You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Quarkus SmallRye JWT配置JWKS刷新间隔不生效如何解决

问题根因与解决方法

根因说明

  • 当前使用的smallrye.jwt.verify.key.location是非标准配置键,SmallRye JWT的JWKS自动刷新逻辑仅对MicroProfile JWT标准配置键mp.jwt.verify.publickey.location生效,这是配置不生效的核心原因。
  • 若微服务A的/key接口返回的响应头携带了正数值的Cache-Control: max-age参数,smallrye.jwt.jwks.refresh-interval配置会被覆盖失效。
  • 若微服务A重启后生成的新JWKS和旧JWKS使用相同的kid,仅公钥内容变更,此时不会触发校验失败的强制刷新逻辑,只会等待常规缓存到期后才会拉取新JWKS。

配置修改方案

1. 替换公钥地址配置键

将微服务B中的smallrye.jwt.verify.key.location改为标准配置mp.jwt.verify.publickey.location,修改后配置示例如下:

mp:
  jwt:
    verify:
      publickey:
        location: http://localhost:8084/key
smallrye:
  jwt:
    jwks:
      refresh-interval: 2
      forced-refresh-interval: 2
# 若微服务B不需要生成JWT令牌,可删除下方固定kid配置
#  token:
#    kid: 123452

2. 调整微服务A的/key接口响应头

确保/key接口不返回Cache-Control: max-age=xx(xx为正整数)的响应头,或者将max-age值设置为小于等于你预期的刷新间隔(比如120秒,对应2分钟),避免覆盖refresh-interval配置。

3. 优化微服务A的JWKS生成逻辑

微服务A重启生成新的RSA密钥对时,同步生成新的kid值,不要固定使用123452。这样当微服务B收到携带新kid的JWT令牌时,发现本地缓存无对应公钥,会立刻触发强制刷新逻辑拉取最新JWKS,不需要等待常规刷新间隔到期。

4. 按需调整刷新间隔

如果需要更快的恢复速度,可以适当调小smallrye.jwt.jwks.forced-refresh-interval的取值(单位为分钟,最小支持0.5即30秒),但注意不要设置过小导致微服务A收到过多重复的JWKS拉取请求。

内容的提问来源于stack exchange,提问作者Giuseppe Scaramuzzino

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.19 23:36:02