Išteklius WebClient, einantis per proxy, vis tiek gali nepavykti prieš API iškvietimą, jei tokeno gavimas naudoja kitą jungtį. Spring Security 6.5 reaktyviajam client_credentials srautui sujunkite visas tris dalis:

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 priskiria tokeno HTTP klientą; provider.setAccessTokenResponseClient priskiria jį grant tiekėjui; manager.setAuthorizedClientProvider įdiegia tą tiekėją. Naudokite šią tvarkyklę tikrame OAuth filtre arba authorized-client darbo eigoje.

HttpClient ir ProxyProvider yra Reactor Netty tipai. WebClient ir jo jungtis yra Spring WebFlux tipai. Perduokite esamą ReactiveClientRegistrationRepository kaip registrations ir ReactiveOAuth2AuthorizedClientService kaip authorizedClients.

Šis tiekėjas apdoroja client_credentials; jei reikia kitų grantų, išlaikykite tinkamą tiekėjų grandinę. Pavyzdyje nėra proxy paskyros; ji priklausytų transportui, o ne OAuth client ID/secret. Viešam token endpoint, leidžiamam per viešą tarpininką, pasirinkite host ir port iš HTTP proxy sąrašo.

Taip pat sukonfigūruokite apsaugoto ištekliaus jungtį, kai tiems API iškvietimams reikia maršruto. Tokeno ir API sėkmė yra atskiri rezultatai.

Susiję straipsniai