Spring Reactive OAuth2: požiadavky na token client_credentials cez proxy
Pri client_credentials v Spring Security 6.5 zapojte tokenový WebClient cez poskytovateľa do správcu authorized-client, ktorý sa skutočne používa.
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.