Sumber daya WebClient yang melewati proxy masih bisa gagal sebelum panggilan API-nya jika pengambilan token memakai konektor lain. Untuk alur client_credentials reaktif di Spring Security 6.5, hubungkan ketiga bagian:

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 ke penyedia grant; manager.setAuthorizedClientProvider memasang penyedia itu. Gunakan manajer ini di filter OAuth sebenarnya atau alur kerja authorized-client.

HttpClient dan ProxyProvider adalah tipe Reactor Netty. WebClient dan konektornya adalah tipe Spring WebFlux. Berikan ReactiveClientRegistrationRepository yang ada sebagai registrations dan ReactiveOAuth2AuthorizedClientService sebagai authorizedClients.

Penyedia ini menangani client_credentials; pertahankan rantai penyedia yang sesuai jika grant lain diperlukan. Contoh ini tidak punya akun proxy; akun itu termasuk transport, bukan OAuth client ID/secret. Untuk token endpoint publik yang diizinkan lewat perantara publik, pilih host dan port dari daftar proxy HTTP.

Konfigurasikan juga konektor sumber daya terlindungi saat panggilan API itu membutuhkan rute. Keberhasilan token dan keberhasilan API adalah hasil yang terpisah.

Artikel terkait