public async Task <OAuth2AccessToken> ExchangeAuthCodeForAccessTokenAsync(string code) { HttpClient httpClient = new HttpClient(); string postUrl = OAuth2Helper.FitbitOauthPostUrl; var content = new FormUrlEncodedContent(new[] { new KeyValuePair <string, string>("grant_type", "authorization_code"), new KeyValuePair <string, string>("client_id", ClientId), //new KeyValuePair<string, string>("client_secret", AppSecret), new KeyValuePair <string, string>("code", code), new KeyValuePair <string, string>("redirect_uri", this.RedirectUri) }); string clientIdConcatSecret = OAuth2Helper.Base64Encode(ClientId + ":" + ClientSecret); httpClient.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Basic", clientIdConcatSecret); HttpResponseMessage response = await httpClient.PostAsync(postUrl, content); string responseString = await response.Content.ReadAsStringAsync(); OAuth2AccessToken accessToken = OAuth2Helper.ParseAccessTokenResponse(responseString); return(accessToken); }
public async Task <OAuth2AccessToken> RefreshTokenAsync(FitbitClient client) { string postUrl = FitbitOauthPostUrl; var content = new FormUrlEncodedContent(new[] { new KeyValuePair <string, string>("grant_type", "refresh_token"), new KeyValuePair <string, string>("refresh_token", client.AccessToken.RefreshToken), }); HttpClient httpClient; if (client.HttpClient == null) { httpClient = new HttpClient(); } else { httpClient = client.HttpClient; } var clientIdConcatSecret = OAuth2Helper.Base64Encode(client.AppCredentials.ClientId + ":" + client.AppCredentials.ClientSecret); httpClient.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Basic", clientIdConcatSecret); HttpResponseMessage response = await httpClient.PostAsync(postUrl, content); string responseString = await response.Content.ReadAsStringAsync(); return(OAuth2Helper.ParseAccessTokenResponse(responseString)); }
// // GET: /FitbitAuth/ // Setup - prepare the user redirect to Fitbit.com to prompt them to authorize this app. public ActionResult Authorize() { var appCredentials = new FitbitAppCredentials() { ClientId = ConfigurationManager.AppSettings["FitbitClientId"], ClientSecret = ConfigurationManager.AppSettings["FitbitClientSecret"] }; //make sure you've set these up in Web.Config under <appSettings>: Session["AppCredentials"] = appCredentials; //Provide the App Credentials. You get those by registering your app at dev.fitbit.com //Configure Fitbit authenticaiton request to perform a callback to this constructor's Callback method var authenticator = new OAuth2Helper(appCredentials, Request.Url.GetLeftPart(UriPartial.Authority) + "/Fitbit/Callback"); string[] scopes = new string[] { "profile", "activity", "sleep", "weight", "nutrition" }; string authUrl = authenticator.GenerateAuthUrl(scopes, null); return(Redirect(authUrl)); }
//Final step. Take this authorization information and use it in the app public async Task <ActionResult> Callback() { FitbitAppCredentials appCredentials = (FitbitAppCredentials)Session["AppCredentials"]; var authenticator = new OAuth2Helper(appCredentials, Request.Url.GetLeftPart(UriPartial.Authority) + "/Fitbit/Callback"); string code = Request.Params["code"]; OAuth2AccessToken accessToken = await authenticator.ExchangeAuthCodeForAccessTokenAsync(code); /*Console.WriteLine("Zilu-debug"); * Console.Write(accessToken); * Console.WriteLine(accessToken);*/ //Store credentials in FitbitClient. The client in its default implementation manages the Refresh process FitbitClient fitbitClient = GetFitbitClient(accessToken); //20171025 Pandita: removed saving tokens //SyncFitbitCred(accessToken); //return RedirectToAction("Index", "Home"); return(RedirectToAction("Sync", "UserDatas")); // redirect to UserdatasController.cs/Sync(). }