Tags: #golang #oauth
// Manually setup oauth with a separate UI based app
// Then if you need to refresh your token, read:
// https://developers.google.com/identity/protocols/OAuth2WebServer#offline
//
// The refresh_token is something you get only once you've authenticated
// Having this means you're already authenticated and so it's ok for a new token to be issued to you
// Unless the service owner has revoked your token already, then this wouldn't work
form := url.Values{}
form.Add("refresh_token", settings.GoogleRefreshToken)
form.Add("client_id", settings.GoogleClientID)
form.Add("client_secret", settings.GoogleClientSecret)
form.Add("grant_type", "refresh_token")
params := strings.NewReader(form.Encode())
req, err := http.NewRequest("POST", "https://www.googleapis.com/oauth2/v4/token", params)
if err != nil {
http.Error(w, err.Error(), http.StatusBadRequest)
}
req.Header.Add("Content-Type", "application/x-www-form-urlencoded")
client := &http.Client{}
response, err := client.Do(req)
if err != nil {
http.Error(w, err.Error(), http.StatusBadRequest)
}
responseBody, err := ioutil.ReadAll(response.Body)
if err != nil {
http.Error(w, err.Error(), http.StatusBadRequest)
}
fmt.Printf("responseBody: %+v\n", string(responseBody)) // JSON reponse with your new token