Прокси арқылы өтетін WebClient ресурсы токенді алу басқа коннекторды қолданса, API шақыруына дейін сәтсіз аяқталуы мүмкін. Spring Security 6.5-тің реактивті client_credentials ағыны үшін үш бөлікті де қосыңыз:

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 прокси тізімінен host пен port таңдаңыз.

Осы API шақыруларына маршрут қажет болса, қорғалған ресурстың коннекторын да конфигурациялаңыз. Токеннің және API-дің сәттілігі — бөлек нәтижелер.

Қатысты мақалалар