პროქსის გავლით მომუშავე რესურსი 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-ისთვის აირჩიეთ host და port HTTP პროქსების სიიდან.

ასევე დააკონფიგურირეთ დაცული რესურსის კონექტორი, როცა ამ API გამოძახებებს მარშრუტი სჭირდება. ტოკენის და API-ის წარმატება ცალკეული შედეგებია.

დაკავშირებული სტატიები