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

Spring Security中JWT Decoder是否会被每个请求调用?

Spring Security中JWT解码器的JWKS端点调用疑问

我的实现代码

JWT解码器配置

@Configuration
internal class JwtConfig(
    private val serverProperties: ServerProperties,
) {

    @Bean
    // for decoding JWT tokens
    fun jwtDecoder() : ReactiveJwtDecoder {
        return NimbusReactiveJwtDecoder
            .withJwkSetUri(serverProperties.auth0JwKeySetUri)
            .build()
    }
}

其中jwkseturi是提供用于验证签名的JWT公钥的外部端点。

认证管理器使用方式

val jwtAuthManager = JwtReactiveAuthenticationManager(jwtDecoder)
        jwtAuthManager.setJwtAuthenticationConverter(jwtTokenConverter)

随后将其接入Spring Security主链路中。

疑问

该外部端点是否会被每个请求调用?如果是,是否会像不透明令牌的令牌introspection那样消耗大量资源?


回答

不会每个请求都调用外部JWKS端点,NimbusReactiveJwtDecoder默认会对JWK集进行缓存,以此避免重复请求带来的资源消耗。

具体细节:

  • 首次处理带JWT的请求时,解码器会调用JWKS端点获取公钥集,并将其缓存
  • 后续所有请求都会直接使用缓存中的公钥验证JWT签名,无需再调用外部端点
  • 缓存具备自动刷新机制:当遇到的JWT签名密钥不在缓存内,或者缓存的JWK集已过期时,才会重新请求外部端点

和不透明令牌的令牌introspection机制不同:introspection通常需要每个请求都调用授权服务器验证令牌有效性,而JWT是基于缓存公钥的本地验证,资源消耗要低很多。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 10:43:11