Spring Reactive OAuth2: proxy-tokenversoeke vir client_credentials
Vir client_credentials in Spring Security 6.5 koppel jy die token-WebClient via die verskaffer aan die authorized-client-bestuurder wat werklik gebruik word.
'n Geproxyde hulpbron WebClient kan steeds voor sy API-oproep misluk as die tokenverkryging 'n ander connector gebruik. Vir Spring Security 6.5 se reaktiewe client_credentials-vloei verbind jy al drie dele:
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 ken die token-HTTP-kliënt toe; provider.setAccessTokenResponseClient ken dit aan die toekenningsverskaffer toe; manager.setAuthorizedClientProvider installeer daardie verskaffer. Gebruik hierdie bestuurder in die werklike OAuth-filter of die authorized-client-werkvloei.
HttpClient en ProxyProvider is Reactor Netty-tipes. WebClient en sy connector is Spring WebFlux-tipes. Gee die bestaande ReactiveClientRegistrationRepository as registrations en ReactiveOAuth2AuthorizedClientService as authorizedClients.
Hierdie verskaffer hanteer client_credentials; behou 'n gepaste verskaffersketting as ander toekennings nodig is. Die voorbeeld het geen proxy-rekening nie; dit sou by die transport hoort, nie by die OAuth-kliënt-ID/geheim nie. Vir 'n publieke token-eindpunt wat deur 'n publieke tussenganger toegelaat word, kies gasheer- en poortkandidate uit die HTTP-proxylys.
Konfigureer ook die connector vir beskermde hulpbronne wanneer daardie API-oproepe die roete nodig het. Token- en API-sukses is aparte uitkomste.