O resursă WebClient care trece printr-un proxy poate eșua înainte de apelul API dacă obținerea tokenului folosește alt conector. Pentru fluxul reactiv client_credentials din Spring Security 6.5 conectați toate cele trei părți:

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 atribuie clientul HTTP al tokenului; provider.setAccessTokenResponseClient îl atribuie furnizorului de grant; manager.setAuthorizedClientProvider instalează acel furnizor. Folosiți acest manager în filtrul OAuth real sau în fluxul de lucru authorized-client.

HttpClient și ProxyProvider sunt tipuri Reactor Netty. WebClient și conectorul său sunt tipuri Spring WebFlux. Furnizați ReactiveClientRegistrationRepository existent ca registrations și ReactiveOAuth2AuthorizedClientService ca authorizedClients.

Acest furnizor gestionează client_credentials; păstrați un lanț adecvat de furnizori dacă sunt necesare alte granturi. Exemplul nu are cont de proxy; acesta ar aparține transportului, nu ID-ului/secretului de client OAuth. Pentru un endpoint de token public permis printr-un intermediar public, alegeți host și port din lista de proxy HTTP.

Configurați și conectorul resursei protejate când acele apeluri API au nevoie de rută. Succesul tokenului și succesul API sunt rezultate separate.

Articole similare