منبع 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 آن را به ارائه‌دهنده grant اختصاص می‌دهد؛ manager.setAuthorizedClientProvider آن ارائه‌دهنده را نصب می‌کند. از این مدیر در فیلتر واقعی OAuth یا جریان کاری authorized-client استفاده کنید.

HttpClient و ProxyProvider از نوع‌های Reactor Netty هستند. WebClient و اتصال‌دهنده‌اش از نوع‌های Spring WebFlux هستند. ReactiveClientRegistrationRepository موجود را به‌عنوان registrations و ReactiveOAuth2AuthorizedClientService را به‌عنوان authorizedClients بدهید.

این ارائه‌دهنده client_credentials را مدیریت می‌کند؛ اگر grantهای دیگری لازم است زنجیره ارائه‌دهنده مناسب را حفظ کنید. نمونه حساب پروکسی ندارد؛ آن به لایه انتقال تعلق دارد نه به OAuth client ID/secret. برای یک token endpoint عمومی که از طریق واسطه عمومی مجاز است، میزبان و پورت را از فهرست پروکسی HTTP انتخاب کنید.

اتصال‌دهنده منبع محافظت‌شده را هم پیکربندی کنید وقتی آن فراخوانی‌های API به مسیر نیاز دارند. موفقیت توکن و موفقیت API دو نتیجه جداگانه‌اند.

مقالات مرتبط