Sumber WebClient yang melalui proksi masih boleh gagal sebelum panggilan API-nya jika pemerolehan token menggunakan penyambung lain. Untuk aliran client_credentials reaktif Spring Security 6.5, sambungkan ketiga-tiga bahagian:

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 menetapkan klien HTTP token; provider.setAccessTokenResponseClient menetapkannya kepada penyedia grant; manager.setAuthorizedClientProvider memasang penyedia itu. Gunakan pengurus ini dalam penapis OAuth sebenar atau aliran kerja authorized-client.

HttpClient dan ProxyProvider ialah jenis Reactor Netty. WebClient dan penyambungnya ialah jenis Spring WebFlux. Berikan ReactiveClientRegistrationRepository sedia ada sebagai registrations dan ReactiveOAuth2AuthorizedClientService sebagai authorizedClients.

Penyedia ini mengendalikan client_credentials; kekalkan rantaian penyedia yang sesuai jika grant lain diperlukan. Contoh ini tiada akaun proksi; itu tergolong dalam pengangkutan, bukan OAuth client ID/secret. Untuk token endpoint awam yang dibenarkan melalui perantara awam, pilih host dan port daripada senarai proksi HTTP.

Konfigurasikan juga penyambung sumber terlindung apabila panggilan API itu memerlukan laluan. Kejayaan token dan kejayaan API ialah hasil yang berasingan.

Artikel berkaitan