Spring boot Spring boot oauth2客户端凭据使用webflux动态配置
我使用的是SpringBoot2.3.6.0版本。 我需要使用webflux集成的动态配置为oauth2客户端凭据配置我的应用程序 我尝试了以下代码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
@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 ==
}