Spring Reactive OAuth2: proxade tokenbegäranden för client_credentials
För client_credentials i Spring Security 6.5 kopplar du token-WebClient via leverantören till den authorized-client-hanterare som faktiskt används.
En resurs WebClient som går via en proxy kan fortfarande misslyckas före sitt API-anrop om tokenhämtningen använder en annan connector. För det reaktiva client_credentials-flödet i Spring Security 6.5 kopplar du alla tre delarna:
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 tilldelar token-HTTP-klienten; provider.setAccessTokenResponseClient tilldelar den till grant-leverantören; manager.setAuthorizedClientProvider installerar den leverantören. Använd denna hanterare i det faktiska OAuth-filtret eller authorized-client-arbetsflödet.
HttpClient och ProxyProvider är Reactor Netty-typer. WebClient och dess connector är Spring WebFlux-typer. Skicka den befintliga ReactiveClientRegistrationRepository som registrations och ReactiveOAuth2AuthorizedClientService som authorizedClients.
Den här leverantören hanterar client_credentials; behåll en lämplig leverantörskedja om andra grants behövs. Exemplet har inget proxykonto; det skulle höra till transporten och inte till OAuth client ID/secret. För en offentlig token-endpoint som tillåts via en offentlig mellanhand, välj värd och port från HTTP-proxylistan.
Konfigurera även connectorn för den skyddade resursen när dessa API-anrop behöver rutten. Token- och API-framgång är separata utfall.