Một tài nguyên WebClient đi qua proxy vẫn có thể thất bại trước lời gọi API nếu việc lấy token dùng một connector khác. Với luồng client_credentials phản ứng của Spring Security 6.5, hãy nối cả ba phần:

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 gán máy khách HTTP của token; provider.setAccessTokenResponseClient gán nó cho nhà cung cấp grant; manager.setAuthorizedClientProvider cài đặt nhà cung cấp đó. Dùng trình quản lý này trong bộ lọc OAuth thực tế hoặc luồng công việc authorized-client.

HttpClient và ProxyProvider là kiểu Reactor Netty. WebClient và connector của nó là kiểu Spring WebFlux. Truyền ReactiveClientRegistrationRepository sẵn có làm registrations và ReactiveOAuth2AuthorizedClientService làm authorizedClients.

Nhà cung cấp này xử lý client_credentials; giữ chuỗi nhà cung cấp phù hợp nếu cần grant khác. Ví dụ không có tài khoản proxy; nó thuộc lớp truyền tải chứ không phải OAuth client ID/secret. Với một token endpoint công khai được cho phép qua trung gian công khai, hãy chọn host và port từ danh sách proxy HTTP.

Cũng cấu hình connector của tài nguyên được bảo vệ khi các lời gọi API đó cần tuyến đường. Thành công của token và của API là hai kết quả riêng.

Bài viết liên quan