Spring Reactive OAuth2: maombi ya token client_credentials kupitia proksi
Kwa client_credentials katika Spring Security 6.5, unganisha WebClient ya token kupitia mtoa huduma na meneja wa authorized-client anayetumika kwa kweli.
Rasilimali WebClient inayopita kwenye proksi bado inaweza kushindwa kabla ya wito wake wa API ikiwa upatikanaji wa token unatumia kiunganishi kingine. Kwa mtiririko tendaji wa client_credentials wa Spring Security 6.5 unganisha sehemu zote tatu:
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 huweka mteja wa HTTP wa token; provider.setAccessTokenResponseClient humweka kwa mtoa grant; manager.setAuthorizedClientProvider husakinisha mtoa huyo. Tumia meneja huyu katika kichujio halisi cha OAuth au mtiririko wa kazi wa authorized-client.
HttpClient na ProxyProvider ni aina za Reactor Netty. WebClient na kiunganishi chake ni aina za Spring WebFlux. Toa ReactiveClientRegistrationRepository iliyopo kama registrations na ReactiveOAuth2AuthorizedClientService kama authorizedClients.
Mtoa huyu hushughulikia client_credentials; hifadhi mnyororo unaofaa wa watoa ikiwa grant nyingine zinahitajika. Mfano hauna akaunti ya proksi; hiyo ingekuwa ya usafirishaji na si ya OAuth client ID/secret. Kwa token endpoint ya umma inayoruhusiwa kupitia mpatanishi wa umma, chagua host na port kutoka orodha ya proksi za HTTP.
Sanidi pia kiunganishi cha rasilimali iliyolindwa wakati wito hizo za API zinahitaji njia. Mafanikio ya token na ya API ni matokeo tofauti.