Zdroj WebClient jdoucí přes proxy může selhat ještě před voláním API, pokud získání tokenu používá jiný konektor. U reaktivního toku client_credentials v Spring Security 6.5 propojte všechny tři části:

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 přiřazuje HTTP klienta pro token; provider.setAccessTokenResponseClient jej přiřazuje poskytovateli grantu; manager.setAuthorizedClientProvider instaluje tohoto poskytovatele. Tohoto správce použijte ve skutečném OAuth filtru nebo v pracovním postupu authorized-client.

HttpClient a ProxyProvider jsou typy Reactor Netty. WebClient a jeho konektor jsou typy Spring WebFlux. Předávejte existující ReactiveClientRegistrationRepository jako registrations a ReactiveOAuth2AuthorizedClientService jako authorizedClients.

Tento poskytovatel obsluhuje client_credentials; pokud jsou potřeba jiné granty, zachovejte vhodný řetězec poskytovatelů. Příklad nemá proxy účet, ten by patřil k transportu, nikoli k OAuth client ID/secret. Pro veřejný token endpoint povolený přes veřejného zprostředkovatele vyberte hostitele a port ze seznamu HTTP proxy.

Nakonfigurujte také konektor chráněného zdroje, když tato volání API potřebují trasu. Úspěch tokenu a úspěch API jsou oddělené výsledky.

Související články