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);