首页 > 解决方案 > 增加 OAuth 客户端

问题描述

我目前在我的应用程序中仅使用一个 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();
}

现在我需要添加另一个使用相同令牌 uri 和授权类型的 OAuth 客户端 ID。像这样的……</p>

 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-bootwebclientspring-security-oauth2spring-oauth2

解决方案


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

@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");
  }

推荐阅读