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

Spring Boot 3 OAuth2Client启动报错:无合适HttpMessageConverter求解

解决方法

1. 修正客户端Scope拼写错误

客户端配置中api-client-oidc的scope字段拼写错误,将opened改为OIDC标准的openid:

api-client-oidc:
  # ...其他配置
  scope: openid

2. 允许授权服务OIDC端点匿名访问

当前授权服务的Security配置要求所有请求必须认证,导致客户端请求OIDC元数据端点时被重定向到登录页面(返回HTML)。修改授权服务的DefaultSecurityConfig,开放OIDC相关端点:

@Bean
SecurityFilterChain defaultSecurityFilterChain(HttpSecurity http) throws Exception {
    http.authorizeHttpRequests(authorizeRequests -> authorizeRequests
            .requestMatchers("/.well-known/openid-configuration", "/oauth2/jwks").permitAll()
            .anyRequest().authenticated())
            .formLogin(Customizer.withDefaults());
    return http.build();
}

3. 配置授权服务为OIDC兼容服务器

如果授权服务尚未配置为Spring Authorization Server,需完成以下步骤:

  • 添加Spring Authorization Server依赖(Maven):
<dependency>
    <groupId>org.springframework.security</groupId>
    <artifactId>spring-security-oauth2-authorization-server</artifactId>
    <version>1.2.1</version>
</dependency>
  • 配置注册客户端和授权服务器设置:
@Configuration
public class AuthorizationServerConfig {

    @Bean
    public RegisteredClientRepository registeredClientRepository() {
        RegisteredClient apiClient = RegisteredClient.withId(UUID.randomUUID().toString())
                .clientId("api-client")
                .clientSecret("{noop}secret") // 生产环境需使用加密密码
                .clientAuthenticationMethod(ClientAuthenticationMethod.CLIENT_SECRET_BASIC)
                .authorizationGrantType(AuthorizationGrantType.AUTHORIZATION_CODE)
                .redirectUri("http://127.0.0.1:8080/login/oauth2/code/api-client-oidc")
                .redirectUri("http://127.0.0.1:8080/authorized")
                .scope("openid")
                .scope("api.read")
                .build();
        return new InMemoryRegisteredClientRepository(apiClient);
    }

    @Bean
    public AuthorizationServerSettings authorizationServerSettings() {
        return AuthorizationServerSettings.builder().build();
    }
}

4. 验证OIDC元数据端点

启动授权服务后,直接访问http://auth-server:9000/.well-known/openid-configuration(本地测试替换auth-server为localhost),确认返回JSON格式的元数据,而非HTML页面。

5. 确保授权服务地址可解析

如果客户端无法解析auth-server主机名,修改客户端application.yml中的issuer-uri为可访问地址(如http://localhost:9000),或在客户端机器的hosts文件中添加auth-server到127.0.0.1的映射。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 08:37:06