Spring Reactive OAuth2: proxované požadavky na token client_credentials
U client_credentials v Spring Security 6.5 zapojte tokenový WebClient přes poskytovatele do správce authorized-client, který se skutečně používá.
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.