是否支持Spring Boot WebClient OAuth2 CLIENT_Credentials? [英] Is Spring Boot WebClient OAuth2 client_credentials supported?
本文介绍了是否支持Spring Boot WebClient OAuth2 CLIENT_Credentials?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在尝试创建一个Spring Boot REST应用程序,该应用程序必须对另一个受OAuth2保护的Spring Boot应用程序进行远程REST调用(使用授予类型CLIENT_CREDICATIONS)。
第一个应用程序使用反应性WebClient调用第二个OAuth2 REST应用程序。
我已将WebClient配置为GRANT_TYPE"CLIENT_Credentials"(请参阅下面的代码)
public WebClient messageWebClient(
ClientRegistrationRepository clientRegistrations,
OAuth2AuthorizedClientRepository authorizedClients,
ClientHttpConnector clientHttpConnector
) {
ServletOAuth2AuthorizedClientExchangeFilterFunction oauth =
new ServletOAuth2AuthorizedClientExchangeFilterFunction(clientRegistrations, authorizedClients);
oauth.setDefaultClientRegistrationId("message");
return WebClient.builder()
.baseUrl(MESSAGE_BASE_URL)
.clientConnector(clientHttpConnector)
.defaultHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE)
.defaultHeader(HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON_VALUE)
.filter(oauth)
.filter(logRequest())
.build();
}
@Bean
public ClientRegistrationRepository clientRegistrations() {
ClientRegistration clientRegistration = ClientRegistration
.withRegistrationId("message")
.clientId("client")
.clientSecret("secret")
.authorizationGrantType(AuthorizationGrantType.CLIENT_CREDENTIALS)
.tokenUri("http://localhost:8081/oauth/token")
.build();
return new InMemoryClientRegistrationRepository(clientRegistration);
}
但每次我对第一个应用程序进行邮递员调用时,都会出现以下异常:
<DefaultOAuth2AuthorizationRequestResolver
异常:ID为...的客户端注册的授权授权类型(CLIENT_Credentials)无效WebClient是否确实支持"CLIENT_Credentials"...还是我错过了什么?
问候
- 第一个应用程序代码: https://github.com/fdlessard/SpringBootOauth2WebClient
Second应用程序代码: https://github.com/fdlessard/SpringBootOAuth2Message
SpringBoot版本2.1.4
- Spring-SECURITY-OAuth2-CLIENT:5.1.5.RELEASE
推荐答案
我终于能够让我的代码工作了。
.是的,WebClient确实支持带有CLIENT_Credential的OAuth2(部分)。
要解决我的问题我必须禁用OAuth2自动配置并创建我自己的WebSecurityConfigurerAdapter.
实现 我之所以说"部分",是因为WebClient的当前版本的Spring Security(5.1.x)在令牌过期后不会要求新的令牌(用于客户端凭据)。仅在版本5.2.0.M2或(M1)中,它在令牌过期时要求提供新令牌。谢谢:)
这篇关于是否支持Spring Boot WebClient OAuth2 CLIENT_Credentials?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文