Spring Reactive OAuth2: client_credentials ტოკენის მოთხოვნები პროქსის გავლით
Spring Security 6.5-ის client_credentials-ისთვის ტოკენის WebClient პროვაიდერის გავლით დაუკავშირეთ რეალურად გამოყენებულ authorized-client მენეჯერს.
პროქსის გავლით მომუშავე რესურსი 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-ის წარმატება ცალკეული შედეგებია.