【问题标题】:Multiply OAuth clients增加 OAuth 客户端
【发布时间】:2021-07-16 18:04:39
【问题描述】:

我目前在我的应用程序中仅使用一个 OAuth 客户端 ID。令牌将通过 WebClient 发布请求使用。

spring.security.oauth2.client.registration.ec.client-id=xxx
spring.security.oauth2.client.registration.ec.client-secret=xxx
spring.security.oauth2.client.registration.ec.scope=xx
spring.security.oauth2.client.registration.ec.authorization-grant-type=client_credentials
spring.security.oauth2.client.provider.ec.token-uri=https://xxx

配置:

@Autowired
public ClientRegistrationRepository clientRegistrationRepository;

@Bean
public WebClient webClient(ClientRegistrationRepository clientRegistrationRepository, OAuth2AuthorizedClientService authorizedClientService) {

    AuthorizedClientServiceOAuth2AuthorizedClientManager manager = new AuthorizedClientServiceOAuth2AuthorizedClientManager(clientRegistrationRepository, authorizedClientService);
    manager.setAuthorizedClientProvider(new DelegatingOAuth2AuthorizedClientProvider(
            new RefreshTokenOAuth2AuthorizedClientProvider(),
            new ClientCredentialsOAuth2AuthorizedClientProvider()));
    
    ServletOAuth2AuthorizedClientExchangeFilterFunction oauth2 = new ServletOAuth2AuthorizedClientExchangeFilterFunction(manager);
    oauth2.setDefaultClientRegistrationId("ec");
    
    return WebClient.builder()
            .filter(oauth2)
            //.filter(logRequest())
            .filter(handleResponseError())
            .apply(oauth2.oauth2Configuration())
            .build();
}

现在我需要添加另一个 OAuth 客户端 ID,它将使用相同的 token-uri 和授权类型。像这样的……

 spring.security.oauth2.client.registration.ec1.client-id=xxx1
 spring.security.oauth2.client.registration.ec1.client-secret=xxx1
 spring.security.oauth2.client.registration.ec1.scope=xxx1

如何修改配置以支持多个 OAuth 客户端,以便为每个 WebClient 提供必要的客户端 ID?

谢谢

【问题讨论】:

    标签: spring-boot webclient spring-security-oauth2 spring-oauth2


    【解决方案1】:

    一种解决方案是如下使用:

    @Override
    public void configure(ClientDetailsServiceConfigurer clientDetails) throws Exception {
    clientDetails.inMemory()
                .withClient("clinetOne")
                .secret("secretOne")
                .scopes("scope")
                .authorizedGrantTypes("GrantType")
            .and()
                .withClient("clientTwo")
                .secret("secretTwo")
                .scopes("scope")
                .authorizedGrantTypes("GrantType");
      }
    

    【讨论】:

    • 谢谢施维塔。我为解决这个问题所做的是为另一个 WebClient 创建另一个 bean。所以每个人都有自己的信心。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-04
    • 2015-08-22
    • 1970-01-01
    • 2013-07-03
    • 2018-05-25
    • 2015-01-14
    • 1970-01-01
    相关资源
    最近更新 更多