This ticket addresses the reactive support for gh-8175.

Comment From: Giambapisasale

My workaround:

public class WebClientReactiveClientCredentialsTokenResponseClientConverter extends WebClientReactiveClientCredentialsTokenResponseClient
{

    private Converter<OAuth2ClientCredentialsGrantRequest, RequestEntity< ? >> requestEntityConverter = new OAuth2ClientCredentialsGrantRequestEntityConverter();

...

private BodyInserters.FormInserter<String> createTokenRequestBody(OAuth2ClientCredentialsGrantRequest grantRequest)
    {
        ClientRegistration clientRegistration = clientRegistration(grantRequest);
        if (ClientAuthenticationMethod.PRIVATE_KEY_JWT.equals(clientRegistration.getClientAuthenticationMethod()))
        {
            MultiValueMap<String, String> request = (MultiValueMap<String, String>) this.requestEntityConverter
                    .convert(grantRequest)
                    .getBody();
            return BodyInserters.fromFormData(request);
        }
        BodyInserters.FormInserter<String> body = BodyInserters
                .fromFormData(OAuth2ParameterNames.GRANT_TYPE, grantRequest.getGrantType().getValue());
        return populateTokenRequestBody(grantRequest, body);
    }

configured with:


        OAuth2ClientCredentialsGrantRequestEntityConverter requestEntityConverter = new OAuth2ClientCredentialsGrantRequestEntityConverter();
        requestEntityConverter.addParametersConverter(new NimbusJwtClientAuthenticationParametersConverter<>(jwkResolver));

        WebClientReactiveClientCredentialsTokenResponseClientConverter wcReactivePrivateKey = new WebClientReactiveClientCredentialsTokenResponseClientConverter();
        // wc.setWebClient(webClient); // questo dovrà essere compatibile con proxy e mtls
        wcReactivePrivateKey.setRequestEntityConverter(requestEntityConverter);

        ClientCredentialsReactiveOAuth2AuthorizedClientProvider prov = new ClientCredentialsReactiveOAuth2AuthorizedClientProvider();

        prov.setAccessTokenResponseClient(wcReactivePrivateKey);
        authorizedClientManager.setAuthorizedClientProvider(prov);

        ServerOAuth2AuthorizedClientExchangeFilterFunction oauth = new ServerOAuth2AuthorizedClientExchangeFilterFunction(
                authorizedClientManager);