code: func (client Client) Authenticate(creds map[string]string, origin string, grantType constant.GrantType) (string, string, error) {
  	requestBody := url.Values{
  		"grant_type": {string(grantType)},
  	}
  
  	for k, v := range creds {
  		requestBody.Set(k, v)
  	}
  
  	type loginHint struct {
  		Origin string `json:"origin"`
  	}
  
  	originStruct := loginHint{origin}
  	originParam, err := json.Marshal(originStruct)
  	if err != nil {
  		return "", "", err
  	}
  
  	var query url.Values
  	if origin != "" {
  		query = url.Values{
  			"login_hint": {string(originParam)},
  		}
  	}
  
  	request, err := client.newRequest(requestOptions{
  		RequestName: internal.PostOAuthTokenRequest,
  		Header: http.Header{
  			"Content-Type": {"application/x-www-form-urlencoded"},
  		},
  		Body:  strings.NewReader(requestBody.Encode()),
  		Query: query,
  	})
  
  	if err != nil {
  		return "", "", err
  	}
  
  	if grantType == constant.GrantTypePassword {
  		request.SetBasicAuth(client.config.UAAOAuthClient(), client.config.UAAOAuthClientSecret())
  	}
  
  	responseBody := AuthResponse{}
  	response := Response{
  		Result: &responseBody,
  	}
  
  	err = client.connection.Make(request, &response)
  	return responseBody.AccessToken, responseBody.RefreshToken, err
  }
docs: // Authenticate sends a username and password to UAA then returns an access
  // token and a refresh token.