En resurs WebClient som går via en proxy kan fortfarande misslyckas före sitt API-anrop om tokenhämtningen använder en annan connector. För det reaktiva client_credentials-flödet i Spring Security 6.5 kopplar du alla tre delarna:

HttpClient route = HttpClient.create()
    .proxy(p -> p.type(ProxyProvider.Proxy.HTTP)
        .host("proxy.example").port(8080));
WebClient tokenHttp = WebClient.builder()
    .clientConnector(new ReactorClientHttpConnector(route))
    .build();

var tokens = new WebClientReactiveClientCredentialsTokenResponseClient();
tokens.setWebClient(tokenHttp);

var provider = new ClientCredentialsReactiveOAuth2AuthorizedClientProvider();
provider.setAccessTokenResponseClient(tokens);

var manager = new AuthorizedClientServiceReactiveOAuth2AuthorizedClientManager(
    registrations, authorizedClients);
manager.setAuthorizedClientProvider(provider);

tokens.setWebClient tilldelar token-HTTP-klienten; provider.setAccessTokenResponseClient tilldelar den till grant-leverantören; manager.setAuthorizedClientProvider installerar den leverantören. Använd denna hanterare i det faktiska OAuth-filtret eller authorized-client-arbetsflödet.

HttpClient och ProxyProvider är Reactor Netty-typer. WebClient och dess connector är Spring WebFlux-typer. Skicka den befintliga ReactiveClientRegistrationRepository som registrations och ReactiveOAuth2AuthorizedClientService som authorizedClients.

Den här leverantören hanterar client_credentials; behåll en lämplig leverantörskedja om andra grants behövs. Exemplet har inget proxykonto; det skulle höra till transporten och inte till OAuth client ID/secret. För en offentlig token-endpoint som tillåts via en offentlig mellanhand, välj värd och port från HTTP-proxylistan.

Konfigurera även connectorn för den skyddade resursen när dessa API-anrop behöver rutten. Token- och API-framgång är separata utfall.

Relaterade artiklar