code: @SuppressWarnings("unchecked")
  	protected AccessGrant postForAccessGrant(String accessTokenUrl, MultiValueMap<String, String> parameters) {
  		Map<String, Object> result = getRestTemplate().postForObject(accessTokenUrl, parameters, Map.class);
  		if (result == null) {
  			throw new RestClientException("access token endpoint returned empty result");
  		}
  		return extractAccessGrant(result);
  	}
docs: Posts the request for an access grant to the provider.
  The default implementation uses RestTemplate to request the access token and expects a JSON response to be bound to a Map. The information in the Map will be used to create an {@link AccessGrant}.
  Since the OAuth 2 specification indicates that an access token response should be in JSON format, there's often no need to override this method.
  If all you need to do is capture provider-specific data in the response, you should override createAccessGrant() instead.
  However, in the event of a provider whose access token response is non-JSON, you may need to override this method to request that the response be bound to something other than a Map.
  For example, if the access token response is given as form-encoded, this method should be overridden to call RestTemplate.postForObject() asking for the response to be bound to a MultiValueMap (whose contents can then be used to create an AccessGrant).
  @param accessTokenUrl the URL of the provider's access token endpoint.
  @param parameters the parameters to post to the access token endpoint.
  @return the access grant.