Audience not supported in Spring's @EnableOAuth2Client

Hi rogier

I found myself in the same situation as you. I couldn’t make the Interceptor to be triggered and so my request failed as it did not contained the audience property. I went for a different approach then.
I basically added an extra AccessTokenProvider to the RestTemplate. That AccessTokenProvider has an RequestEnhancer which is in charge to add extra parameters to the request. It looks like:

		//Create the Resource Details
        ClientCredentialsResourceDetails resourceDetails = new ClientCredentialsResourceDetails();
        resourceDetails.setClientId(config.getString("auth0.clientId"));
        resourceDetails.setClientSecret(config.getString("auth0.clientSecret"));
        resourceDetails.setAccessTokenUri(config.getString("auth0.issuer"));
        resourceDetails.setClientAuthenticationScheme(AuthenticationScheme.query);

        //Add extra parameters
        DefaultAccessTokenRequest defaultAccessTokenRequest = new DefaultAccessTokenRequest();
        Map<String,String> params = new HashMap<>();
        params.put("audience",config.getString("auth0.audience"));
        defaultAccessTokenRequest.setAll(params);

        //Create a RequestEnhancer that will look for extra parameters
        DefaultRequestEnhancer defaultRequestEnhancer = new DefaultRequestEnhancer();
        defaultRequestEnhancer.setParameterIncludes(Collections.singletonList("audience"));
        
        //Create a new Token Provider
        ClientCredentialsAccessTokenProvider clientCredentialsAccessTokenProvider =  new ClientCredentialsAccessTokenProvider();
        clientCredentialsAccessTokenProvider.setTokenRequestEnhancer(defaultRequestEnhancer);

        //Create the RestTemplate and add a the Token Provider
        this.restTemplate = new HalOAuth2RestTemplate(resourceDetails,new DefaultOAuth2ClientContext(defaultAccessTokenRequest));
        this.restTemplate.setRequestFactory(new HttpComponentsClientHttpRequestFactory());
        this.restTemplate.setAccessTokenProvider(clientCredentialsAccessTokenProvider);

It has the same result as adding the Interceptor, but not sure if it will suit your requirements.

4 Likes