قد يفشل المورد WebClient العامل عبر وسيط قبل نداء API إذا كان الحصول على الرمز يستخدم موصلًا آخر. في تدفق client_credentials التفاعلي في Spring Security 6.5، اربط الأجزاء الثلاثة كلها:

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 عميل HTTP الخاص بالرمز؛ ويعيّنه provider.setAccessTokenResponseClient على مزوّد المنحة؛ ويثبّت manager.setAuthorizedClientProvider ذلك المزوّد. استخدم هذا المدير في مرشّح OAuth الفعلي أو في سير عمل authorized-client.

‏HttpClient وProxyProvider نوعان من Reactor Netty. وWebClient وموصله نوعان من Spring WebFlux. مرّر ReactiveClientRegistrationRepository الموجود باسم registrations وReactiveOAuth2AuthorizedClientService باسم authorizedClients.

يتعامل هذا المزوّد مع client_credentials؛ فاحتفظ بسلسلة مزوّدات مناسبة إذا لزمت منح أخرى. لا يحتوي المثال على حساب وسيط، فهو يخص طبقة النقل لا معرّف عميل OAuth/سرّه. لنقطة نهاية رمز عامة يُسمح بها عبر وسيط عام، اختر مضيفًا ومنفذًا من قائمة وسيطات HTTP.

اضبط أيضًا موصل المورد المحمي عندما تحتاج تلك النداءات إلى المسار. نجاح الرمز ونجاح API نتيجتان منفصلتان.

مقالات ذات صلة