code: func (c *tokenSource) Token() (*oauth2.Token, error) {
  	v := url.Values{
  		"grant_type": {"client_credentials"},
  	}
  	if len(c.conf.Scopes) > 0 {
  		v.Set("scope", strings.Join(c.conf.Scopes, " "))
  	}
  	for k, p := range c.conf.EndpointParams {
  		// Allow grant_type to be overridden to allow interoperability with
  		// non-compliant implementations.
  		if _, ok := v[k]; ok && k != "grant_type" {
  			return nil, fmt.Errorf("oauth2: cannot overwrite parameter %q", k)
  		}
  		v[k] = p
  	}
  
  	tk, err := internal.RetrieveToken(c.ctx, c.conf.ClientID, c.conf.ClientSecret, c.conf.TokenURL, v, internal.AuthStyle(c.conf.AuthStyle))
  	if err != nil {
  		if rErr, ok := err.(*internal.RetrieveError); ok {
  			return nil, (*oauth2.RetrieveError)(rErr)
  		}
  		return nil, err
  	}
  	t := &oauth2.Token{
  		AccessToken:  tk.AccessToken,
  		TokenType:    tk.TokenType,
  		RefreshToken: tk.RefreshToken,
  		Expiry:       tk.Expiry,
  	}
  	return t.WithExtra(tk.Raw), nil
  }
docs: // Token refreshes the token by using a new client credentials request.
  // tokens received this way do not include a refresh token