Spring Reactive OAuth2: αιτήματα token client_credentials μέσω proxy
Για client_credentials στο Spring Security 6.5, συνδέστε το WebClient του token μέσω του παρόχου στον διαχειριστή authorized-client που χρησιμοποιείται πραγματικά.
Ένας πόρος WebClient που περνά από proxy μπορεί να αποτύχει πριν από την κλήση API αν η απόκτηση token χρησιμοποιεί άλλον connector. Για τη reactive ροή 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 client του token· το provider.setAccessTokenResponseClient τον αναθέτει στον πάροχο grant· το manager.setAuthorizedClientProvider εγκαθιστά αυτόν τον πάροχο. Χρησιμοποιήστε αυτόν τον διαχειριστή στο πραγματικό φίλτρο OAuth ή στη ροή εργασίας authorized-client.
Τα HttpClient και ProxyProvider είναι τύποι του Reactor Netty. Το WebClient και ο connector του είναι τύποι του Spring WebFlux. Δώστε το υπάρχον ReactiveClientRegistrationRepository ως registrations και το ReactiveOAuth2AuthorizedClientService ως authorizedClients.
Αυτός ο πάροχος χειρίζεται το client_credentials· διατηρήστε κατάλληλη αλυσίδα παρόχων αν χρειάζονται άλλα grants. Το παράδειγμα δεν έχει λογαριασμό proxy· αυτός θα ανήκε στο transport και όχι στο OAuth client ID/secret. Για δημόσιο token endpoint που επιτρέπεται μέσω δημόσιου μεσάζοντα, επιλέξτε host και port από τη λίστα proxy HTTP.
Διαμορφώστε και τον connector του προστατευμένου πόρου όταν αυτές οι κλήσεις API χρειάζονται τη διαδρομή. Η επιτυχία του token και η επιτυχία του API είναι ξεχωριστά αποτελέσματα.