Spring boot Spring boot oauth2客户端凭据使用webflux动态配置

Spring boot Spring boot oauth2客户端凭据使用webflux动态配置,spring-boot,oauth-2.0,spring-webflux,Spring Boot,Oauth 2.0,Spring Webflux,我使用的是SpringBoot2.3.6.0版本。 我需要使用webflux集成的动态配置为oauth2客户端凭据配置我的应用程序 我尝试了以下代码 @Configuration public class Oauth2ClientConfig { @Bean ReactiveClientRegistrationRepository getRegistration() { ClientRegistration registration = ClientRegist

我使用的是SpringBoot2.3.6.0版本。 我需要使用webflux集成的动态配置为oauth2客户端凭据配置我的应用程序

我尝试了以下代码

@Configuration
public class Oauth2ClientConfig {

    @Bean
    ReactiveClientRegistrationRepository getRegistration() {
        ClientRegistration registration = ClientRegistration
                .withRegistrationId("custom")
                .tokenUri(env.getProperty("accessTokenUri"))
                .clientId(env.getProperty("clientID"))
                .clientSecret(env.getProperty("clientSecret"))
                .authorizationGrantType(AuthorizationGrantType.CLIENT_CREDENTIALS)
                .scope(env.getProperty("scope"))
                .build();
        return new InMemoryReactiveClientRegistrationRepository(registration);
    }

    @Bean(name = "custom")
    WebClient webClient(ReactiveClientRegistrationRepository clientRegistrations) {
        ServerOAuth2AuthorizedClientExchangeFilterFunction oauth = new ServerOAuth2AuthorizedClientExchangeFilterFunction(
                clientRegistrations, new UnAuthenticatedServerOAuth2AuthorizedClientRepository());
        oauth.setDefaultClientRegistrationId("custom");
        return WebClient.builder()
                .filter(oauth)
                .build();
    }
}
但是在这个春季启动版本中,未经验证的服务器OAuth2AuthorizedClientResposition已被删除。
根据spring文档,它说要使用AuthorizedClientServiceReactiveOAuth2AuthorizedClientManager而不是未经身份验证的服务器OAuth2AuthorizedClientStore,但我找不到任何适合此实现的示例。如果有人对如何实现此配置有想法,请提供帮助。

我找到了自己的解决方案,用于未经认证的非认证服务器OAuth2AuthorizedClient Pository

Spring doc表示使用AuthorizedClientService反应式OAuth2AuthorizedClientManager而不是未经身份验证的服务器OAuth2AuthorizedClientStore

下面是在最新的spring引导版本中使用Oauth2配置webflux的完整示例

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;
import org.springframework.security.oauth2.client.AuthorizedClientServiceReactiveOAuth2AuthorizedClientManager;
import org.springframework.security.oauth2.client.InMemoryReactiveOAuth2AuthorizedClientService;
import org.springframework.security.oauth2.client.ReactiveOAuth2AuthorizedClientService;
import org.springframework.security.oauth2.client.registration.ClientRegistration;
import org.springframework.security.oauth2.client.registration.InMemoryReactiveClientRegistrationRepository;
import org.springframework.security.oauth2.client.registration.ReactiveClientRegistrationRepository;
import org.springframework.security.oauth2.client.web.reactive.function.client.ServerOAuth2AuthorizedClientExchangeFilterFunction;
import org.springframework.security.oauth2.core.AuthorizationGrantType;
import org.springframework.web.reactive.function.client.WebClient;

@Configuration
public class Oauth2WebClientConfig {

    private final Environment env;

    @Autowired
    public Oauth2WebClientConfig(Environment env) {
        this.env = env;
    }

    // == Oauth2 Configuration ==
    @Bean
    ReactiveClientRegistrationRepository clientRegistration() {
        ClientRegistration clientRegistration = ClientRegistration
                .withRegistrationId("custom")
                .tokenUri("tokenUri")
                .clientId("clientId")
                .clientSecret("clientSecret")
                .authorizationGrantType(AuthorizationGrantType.CLIENT_CREDENTIALS)
                .scope("scope")
                .build();
        return new InMemoryReactiveClientRegistrationRepository(clientRegistration);
    }

    @Bean
    ReactiveOAuth2AuthorizedClientService authorizedClientService() {
        return new InMemoryReactiveOAuth2AuthorizedClientService(clientRegistration());
    }
    // == Oauth2 Configuration ==

    // == WebFlux Configuration ==
    @Bean
    WebClient webClient(ReactiveClientRegistrationRepository clientRegistrations, ReactiveOAuth2AuthorizedClientService authorizedClientService) {
        ServerOAuth2AuthorizedClientExchangeFilterFunction oauth = new ServerOAuth2AuthorizedClientExchangeFilterFunction(
                new AuthorizedClientServiceReactiveOAuth2AuthorizedClientManager(clientRegistrations, authorizedClientService));
        oauth.setDefaultClientRegistrationId("custom");
        return WebClient.builder()
                .filter(oauth)
                .build();
    }


    // == WebFlux Configuration ==
}