是否支持Spring Boot WebClient OAuth2 CLIENT_Credentials? [英] Is Spring Boot WebClient OAuth2 client_credentials supported?

查看:23
本文介绍了是否支持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"...还是我错过了什么?

问候

推荐答案

我终于能够让我的代码工作了。

.是的,WebClient确实支持带有CLIENT_Credential的OAuth2(部分)。

要解决我的问题我必须禁用OAuth2自动配置并创建我自己的WebSecurityConfigurerAdapter.

实现 我之所以说"部分",是因为WebClient的当前版本的Spring Security(5.1.x)在令牌过期后不会要求新的令牌(用于客户端凭据)。仅在版本5.2.0.M2或(M1)中,它在令牌过期时要求提供新令牌。

谢谢:)

这篇关于是否支持Spring Boot WebClient OAuth2 CLIENT_Credentials?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆