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

Spring Boot OAuth2启动报String转OAuth2ClientProperties$Provider转换器缺失错误

报错原因

该报错核心触发点共两个,按启动时的报错优先级排序:

  • application.yaml配置结构不符合Spring Security OAuth2客户端的自动配置规则:Spring Boot自动配置绑定spring.security.oauth2.client.provider节点时,要求该节点下第一层key为自定义Provider ID(字符串类型),第二层才是authorization-uri、token-uri这类Provider属性,对应绑定的数据结构是Map<String, OAuth2ClientProperties.Provider>。当前配置直接把authorization-uri、token-uri作为provider节点的第一层key,Spring会把authorization-uri识别为Provider ID,尝试将其对应的字符串类型URI值转换为OAuth2ClientProperties.Provider配置对象,找不到对应类型转换器就抛出了所见异常。
  • 代码存在隐性配置不匹配问题:WebClient的OAuth2过滤器中设置的默认客户端注册ID为MarvelGuru,和实际构建ClientRegistration时使用的IDIdOfMyApp不一致,即便解决启动报错,运行时也会抛出找不到客户端注册信息的异常。此外手动通过@Value读取配置拼接ClientRegistration的写法,和Spring Boot自动配置逻辑存在冲突,只要yaml内OAuth2客户端配置结构不符合规则,就会先触发自动配置绑定失败。
修复方案

二选一即可,优先选择方案1,更符合Spring Boot约定,减少冗余代码:

方案1:使用Spring Boot自动配置,删除手动注册ClientRegistration的冗余代码

  1. 修正application.yaml配置结构,给自定义Provider设置唯一ID,让registration节点通过ID关联对应Provider,正确配置示例如下:
spring:
  security:
    oauth2:
      client:
        registration:
          IdOfMyApp:
            provider: my-custom-provider # 填写下方自定义的Provider ID,不要直接写服务地址
            client-id: [my id here]
            client-secret: [my secret here]
            client-authentication-method: basic
            authorization-grant-type: authorization_code
            scope:
              - pr.pro
              - pr.act
              - openid
              - offline
            redirect-uri: https://my.domain.com/fallback
            client-name: My App Name
        provider:
          my-custom-provider: # 自定义Provider ID,需和上方registration内的provider字段值完全一致
            authorization-uri: https://api.provider.guys.com/oauth2/auth
            token-uri: https://api.provider.guys.com/oauth2/token
            issuer-uri: https://api.provider.guys.com
      resourceserver:
        jwt:
          issuer-uri: https://api.provider.guys.com
logging:
  level:
    '[org.springframework.web]': DEBUG
  1. 删除配置类中手动注册ReactiveClientRegistrationRepository的Bean方法,Spring Boot会自动根据yaml配置生成该实例,无需手动拼接ClientRegistration。
  2. 修正WebClient配置中的默认客户端ID,将oauth.setDefaultClientRegistrationId("MarvelGuru")修改为oauth.setDefaultClientRegistrationId("IdOfMyApp"),和yaml中配置的registration ID保持一致。

方案2:保留手动构建ClientRegistration的逻辑,移除冲突的自动配置触发项

如果确实需要手动控制ClientRegistration构建逻辑,按以下步骤修改:

  1. 删除application.yaml中spring.security.oauth2.client下所有registration、provider配置,避免Spring Boot自动配置尝试绑定结构异常的属性。
  2. 将代码中所有@Value读取的配置路径改为自定义配置key(不要使用Spring OAuth2自动配置保留的spring.security.oauth2.client.*路径),例如将${spring.security.oauth2.client.provider.token-uri}改为${my-app.oauth2.token-uri}这类自定义路径,同时在yaml中对应位置添加这些自定义配置项。
  3. 修正WebClient配置中的默认客户端ID,将MarvelGuru改为IdOfMyApp,和手动构建ClientRegistration时使用的registration ID保持一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 04:18:14