Una risorsa WebClient che passa da un proxy può comunque fallire prima della chiamata API se l'ottenimento del token usa un altro connector. Per il flusso reattivo client_credentials di Spring Security 6.5 collega tutte e tre le parti:

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 assegna il client HTTP del token; provider.setAccessTokenResponseClient lo assegna al provider del grant; manager.setAuthorizedClientProvider installa quel provider. Usa questo gestore nel filtro OAuth reale o nel flusso di lavoro authorized-client.

HttpClient e ProxyProvider sono tipi Reactor Netty. WebClient e il suo connector sono tipi Spring WebFlux. Passa il ReactiveClientRegistrationRepository esistente come registrations e il ReactiveOAuth2AuthorizedClientService come authorizedClients.

Questo provider gestisce client_credentials; conserva una catena di provider adeguata se servono altri grant. L'esempio non ha un account proxy: apparterrebbe al trasporto, non all'ID/secret del client OAuth. Per un endpoint token pubblico consentito tramite un intermediario pubblico, scegli host e porta dalla lista di proxy HTTP.

Configura anche il connector della risorsa protetta quando quelle chiamate API hanno bisogno della rotta. Il successo del token e quello dell'API sono esiti separati.

Articoli correlati