Zdroj WebClient idúci cez proxy môže zlyhať ešte pred volaním API, ak získavanie tokenu používa iný konektor. Pri reaktívnom toku client_credentials v Spring Security 6.5 prepojte všetky tri časti:

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 priraďuje HTTP klienta tokenu; provider.setAccessTokenResponseClient ho priraďuje poskytovateľovi grantu; manager.setAuthorizedClientProvider inštaluje tohto poskytovateľa. Tohoto správcu použite v skutočnom OAuth filtri alebo v pracovnom postupe authorized-client.

HttpClient a ProxyProvider sú typy Reactor Netty. WebClient a jeho konektor sú typy Spring WebFlux. Odovzdajte existujúci ReactiveClientRegistrationRepository ako registrations a ReactiveOAuth2AuthorizedClientService ako authorizedClients.

Tento poskytovateľ spracúva client_credentials; ak sú potrebné iné granty, zachovajte vhodnú reťaz poskytovateľov. Príklad nemá proxy účet; ten by patril k transportu, nie k OAuth client ID/secret. Pre verejný token endpoint povolený cez verejného sprostredkovateľa vyberte hostiteľa a port zo zoznamu HTTP proxy.

Nakonfigurujte aj konektor chráneného zdroja, keď tieto volania API potrebujú trasu. Úspech tokenu a úspech API sú oddelené výsledky.

Súvisiace články