public IActionResult SignIn() { GoogleOAuthParameters gauth = new GoogleOAuthParameters(); List <KeyValuePair <string, string> > requestParams = new List <KeyValuePair <string, string> >(); requestParams.Add(new KeyValuePair <string, string>("response_type", gauth.response_type)); requestParams.Add(new KeyValuePair <string, string>("client_id", gauth.client_id)); requestParams.Add(new KeyValuePair <string, string>("redirect_uri", HttpUtility.UrlEncode(gauth.redirect_uri))); requestParams.Add(new KeyValuePair <string, string>("scope", gauth.scope)); //requestParams.Add(new KeyValuePair<string, string>("prompt", gauth.prompt)); requestParams.Add(new KeyValuePair <string, string>("access_type", gauth.access_type)); StringBuilder builder = new StringBuilder(); builder.Append(gauth.url); for (int i = 0; i < requestParams.Count; i++) { if (i != 0) { builder.Append("&"); } builder.Append(string.Format("{0}={1}", requestParams[i].Key, requestParams[i].Value)); } return(Redirect(builder.ToString())); }
public async Task <ActionResult> OAuthCallback(string code) { GoogleOAuthParameters googleOAuthParameters = new GoogleOAuthParameters(); HttpClient client = new HttpClient(); HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, "https://oauth2.googleapis.com/token"); List <KeyValuePair <string, string> > formValues = new List <KeyValuePair <string, string> >(); formValues.Add(new KeyValuePair <string, string>("code", code)); formValues.Add(new KeyValuePair <string, string>("client_id", googleOAuthParameters.client_id)); formValues.Add(new KeyValuePair <string, string>("client_secret", googleOAuthParameters.client_secret)); formValues.Add(new KeyValuePair <string, string>("redirect_uri", googleOAuthParameters.redirect_uri)); formValues.Add(new KeyValuePair <string, string>("grant_type", "authorization_code")); request.Content = new FormUrlEncodedContent(formValues); HttpResponseMessage response = await client.SendAsync(request); if (response.IsSuccessStatusCode) { string responseBody = await response.Content.ReadAsStringAsync(); GoogleTokenResponse token = JsonConvert.DeserializeObject <GoogleTokenResponse>(responseBody); HttpRequestMessage userProfileRequest = new HttpRequestMessage(HttpMethod.Get, "https://www.googleapis.com/oauth2/v2/userinfo"); userProfileRequest.Headers.Add("Authorization", "Bearer " + token.access_token); HttpResponseMessage userProfileResponse = await client.SendAsync(userProfileRequest); if (userProfileResponse.IsSuccessStatusCode) { string userProfileJson = await userProfileResponse.Content.ReadAsStringAsync(); GoogleUserProfile userProfile = JsonConvert.DeserializeObject <GoogleUserProfile>(userProfileJson); return(RedirectToAction("Index", "Home")); } else { return(RedirectToAction("Error", "Home")); } } else { return(RedirectToAction("Error", "Home")); } }