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

是否可将Auth Server与Resource Server合并到同一个Spring Boot项目中

结论

完全可以将授权服务器和资源服务器合并到同一个Spring Boot应用中,你遇到的启动顺序限制只是默认配置的行为导致的,并非架构层面的强制约束。

问题原因

Spring Security 资源服务器的默认逻辑是:启动阶段就主动请求/.well-known/openid-configuration端点拉取OIDC元数据,用于初始化JWT解码器。当两个组件部署在同一个应用时,启动阶段授权服务器的端点还未完成注册和初始化,就会导致请求失败、应用启动报错。

解决方法

你可以通过修改配置跳过启动阶段的远程元数据拉取,两种常用方案如下:

  • 方案1:本地配置JWT解码密钥,完全跳过远程拉取逻辑
    直接复用授权服务器的签名公钥配置资源服务器,不需要再发送HTTP请求拉取元数据,配置示例如下:
    spring:
      security:
        oauth2:
          resourceserver:
            jwt:
              # 本地公钥文件路径
              public-key-location: classpath:auth-public.pem
              # 仅做issuer合法性校验,不会在启动时请求该地址
              issuer-uri: http://127.0.0.1:8080
    
  • 方案2:配置元数据懒加载
    自定义JwtDecoder,将元数据拉取逻辑调整为首次收到需要鉴权的请求时再执行,此时应用已经完全启动,授权服务器端点已经可用,配置示例如下:
    @Bean
    public JwtDecoder jwtDecoder(OAuth2ResourceServerProperties properties) {
        return NimbusJwtDecoder.withIssuerLocation(properties.getJwt().getIssuerUri())
                // 配置元数据缓存,同时实现启动时不拉取,首次请求再拉取的效果
                .cache(Caffeine.newBuilder()
                        .expireAfterWrite(Duration.ofMinutes(10))
                        .build())
                .build();
    }
    

补充说明

官方示例拆分为两个独立应用,只是为了更清晰的演示两个组件的不同职责,方便开发者理解权限校验流程,并非必须遵守的部署要求。合并部署时注意将授权服务器的安全配置优先级设置为高于资源服务器,避免授权端点被资源服务器的安全规则拦截。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 07:21:00