首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用webflux动态配置oauth2客户端凭据

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

Stack Overflow用户
提问于 2020-11-18 16:46:50
回答 1查看 812关注 0票数 1

我使用的是spring 2.3.6 version版本。我需要为oauth2客户端凭据配置我的应用程序,并使用webflux集成进行动态配置。

我试过遵循密码。

代码语言:javascript
运行
复制
@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();
    }
}

但是在这个春季的引导版本中,UnAuthenticatedServerOAuth2AuthorizedClientRepository被降级了。根据春季文档,它说要在AuthorizedClientServiceReactiveOAuth2AuthorizedClientManager中使用UnAuthenticatedServerOAuth2AuthorizedClientRepository,但是我找不到适合这个实现的示例。如果有人对如何实现此配置有想法,请帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-19 15:17:47

我为UnAuthenticatedServerOAuth2AuthorizedClientRepository.找到了自己的解决方案

Spring说要在AuthorizedClientServiceReactiveOAuth2AuthorizedClientManager中使用UnAuthenticatedServerOAuth2AuthorizedClientRepository.你都能在这找到你的需要。

以下是在最新春季启动版本中使用Oauth2配置网络流量的完整示例。

代码语言:javascript
运行
复制
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 ==
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64897513

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档