Spring Authorization无法访问资源服务器问题求助
问题排查方案
根据你提供的错误栈和操作流程,核心问题是资源服务器请求授权服务器的OIDC配置端点时,得到的是HTML内容而非预期的JSON,导致JWT解码器初始化失败。以下是具体排查步骤:
1. 验证授权服务器的OIDC配置端点
直接访问授权服务器的OIDC配置端点:
http://127.0.0.1:9500/.well-known/openid-configuration
- 如果返回HTML页面(比如404、登录页),说明授权服务器未正确暴露该端点,或者配置有误。
- 正常情况应返回包含
jwks_uri、issuer等字段的JSON数据。
2. 检查资源服务器的Issuer配置
确认资源服务器配置文件(application.properties/application.yml)中,JWT issuer配置是否正确:
# application.properties示例 spring.security.oauth2.resourceserver.jwt.issuer-uri=http://127.0.0.1:9500
- 该URI必须和授权服务器实际签发Token的
issuer完全一致,且能被资源服务器正常访问。
3. 检查授权服务器的端点暴露配置
如果使用Spring Authorization Server,需确保OIDC相关端点允许匿名访问:
@Bean public SecurityFilterChain authServerSecurityFilterChain(HttpSecurity http) throws Exception { OAuth2AuthorizationServerConfiguration.applyDefaultSecurity(http); http.getConfigurer(OAuth2AuthorizationServerConfigurer.class) .oidc(Customizer.withDefaults()); // 启用OIDC功能 // 允许匿名访问配置端点 http.authorizeHttpRequests(auth -> auth .requestMatchers("/.well-known/openid-configuration", "/oauth2/jwks") .permitAll() .anyRequest().authenticated()); return http.build(); }
4. 确认授权服务器是否启用OIDC功能
如果授权服务器未启用OIDC提供者支持,资源服务器无法通过自动发现机制获取JWT验证配置:
- 新版Spring Authorization Server需通过
OAuth2AuthorizationServerConfiguration启用OIDC;旧版需添加@EnableAuthorizationServer注解。
5. 排查网络/端口访问问题
- 确认资源服务器所在环境能正常访问
http://127.0.0.1:9500,容器化部署需检查端口映射是否正确。 - 检查9500端口是否被授权服务器正常占用,未被其他进程抢占。
内容的提问来源于stack exchange,提问作者Andelic47 Aaron
相关产品推荐
相关产品推荐

