Spring OAuth2客户端启动报错:Issuer配置解析失败及HttpMessageConverter异常
问题描述
- 基于Spring框架搭建OAuth2授权服务器、资源服务器与客户端,curl测试授权服务器和资源服务器运行正常
- 客户端配置(含
application.yaml)完成并启动后,出现两类错误:Unable to resolve Configuration with the provided Issuer of "http:localhost:9000"org.springframework.web.client.UnknownContentTypeException(找不到适配text/html类型的HttpMessageConverter)
- 已尝试配置
MappingJackson2HttpMessageConverter,但问题未解决
解决方案
1. 修复Issuer地址格式错误
错误提示中的Issuer地址http:localhost:9000缺少了双斜杠,这是核心问题之一。Spring Security OAuth2客户端无法解析格式错误的地址,导致无法获取授权服务器的元数据(如/.well-known/openid-configuration端点)。
检查客户端application.yaml中的Issuer配置,修正为正确格式:
spring: security: oauth2: client: provider: oauth2-provider: issuer-uri: http://localhost:9000
2. 解决UnknownContentTypeException问题
这个错误通常是因为客户端请求授权服务器元数据时,得到的是text/html类型的响应(比如授权服务器返回错误页面,而非JSON格式的元数据),默认HttpMessageConverter不支持解析该类型。
排查与修复步骤:
- 先验证授权服务器端点:用curl访问
http://localhost:9000/.well-known/openid-configuration,确认返回内容类型为application/json。如果返回HTML错误页面(如404、500),先修复授权服务器的端点配置问题。 - 检查客户端请求地址:如果Issuer地址之前错误,客户端请求可能跳转到了错误页面,导致返回text/html,修复Issuer地址后即可解决。
- 自定义HttpMessageConverter(必要时):若确实需要处理text/html响应,可给客户端使用的RestTemplate添加对应支持:
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.http.MediaType; import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; import org.springframework.security.oauth2.client.OAuth2RestTemplate; import org.springframework.security.oauth2.client.resource.OAuth2ProtectedResourceDetails; import java.util.ArrayList; import java.util.List; @Configuration public class OAuth2ClientConfig { @Bean public OAuth2RestTemplate oAuth2RestTemplate(OAuth2ProtectedResourceDetails resourceDetails) { OAuth2RestTemplate restTemplate = new OAuth2RestTemplate(resourceDetails); MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter(); List<MediaType> mediaTypes = new ArrayList<>(converter.getSupportedMediaTypes()); mediaTypes.add(MediaType.TEXT_HTML); converter.setSupportedMediaTypes(mediaTypes); restTemplate.getMessageConverters().add(converter); return restTemplate; } }
排查优先级
- 优先修正Issuer地址的格式错误,这是引发后续连锁问题的根源
- 验证授权服务器元数据端点的可用性
- 最后根据实际情况配置HttpMessageConverter
内容的提问来源于stack exchange,提问作者Lev
相关产品推荐
相关产品推荐

