/// <summary> /// Refreshes the token asynchronous. /// </summary> /// <param name="clientSettings">ApiClientSettings needed for creating a proper refresh token HTTP post call.</param> /// <returns>Returns OAuth2AccessToken</returns> public static async Task <OAuth2AccessToken> RefreshTokenAsync(ApiClientSettings clientSettings) { var postUrl = DigiKeyUriConstants.TokenEndpoint; var content = new FormUrlEncodedContent(new[] { new KeyValuePair <string, string>(OAuth2Constants.GrantType, OAuth2Constants.GrantTypes.RefreshToken), new KeyValuePair <string, string>(OAuth2Constants.GrantTypes.RefreshToken, clientSettings.RefreshToken), }); var httpClient = new HttpClient(); var clientIdConcatSecret = OAuth2Helpers.Base64Encode(clientSettings.ClientId + ":" + clientSettings.ClientSecret); httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", clientIdConcatSecret); var response = await httpClient.PostAsync(postUrl, content); var responseString = await response.Content.ReadAsStringAsync(); var oAuth2AccessTokenResponse = OAuth2Helpers.ParseOAuth2AccessTokenResponse(responseString); clientSettings.UpdateAndSave(oAuth2AccessTokenResponse); return(oAuth2AccessTokenResponse); }
/// <summary> /// Refreshes the token asynchronous. /// </summary> /// <param name="clientSettings">ApiClientSettings needed for creating a proper refresh token HTTP post call.</param> /// <returns>Returns OAuth2AccessToken</returns> public static async Task <OAuth2AccessToken> RefreshTokenAsync(ApiClientSettings clientSettings) { var postUrl = DigiKeyUriConstants.TokenEndpoint; var content = new FormUrlEncodedContent(new[] { new KeyValuePair <string, string>(OAuth2Constants.GrantType, OAuth2Constants.GrantTypes.RefreshToken), new KeyValuePair <string, string>(OAuth2Constants.ClientId, clientSettings.ClientId), new KeyValuePair <string, string>(OAuth2Constants.ClientSecret, clientSettings.ClientSecret), new KeyValuePair <string, string>(OAuth2Constants.GrantTypes.RefreshToken, clientSettings.RefreshToken), }); var httpClient = new HttpClient(); var response = await httpClient.PostAsync(postUrl, content); var responseString = await response.Content.ReadAsStringAsync(); var oAuth2AccessTokenResponse = OAuth2Helpers.ParseOAuth2AccessTokenResponse(responseString); _log.DebugFormat("RefreshToken: " + oAuth2AccessTokenResponse); clientSettings.UpdateAndSave(oAuth2AccessTokenResponse); return(oAuth2AccessTokenResponse); }
/// <summary> /// OAuth2 code flow authorization with apiclient.config values /// </summary> private async void Authorize() { // read clientSettings values from apiclient.config _clientSettings = ApiClientSettings.CreateFromConfigFile(); Console.WriteLine(_clientSettings.ToString()); // start up a HttpListener for the callback(RedirectUri) from the OAuth2 server var httpListener = new HttpListener(); httpListener.Prefixes.Add(_clientSettings.RedirectUri.EnsureTrailingSlash()); Console.WriteLine($"listening to {_clientSettings.RedirectUri}"); httpListener.Start(); // Initialize our OAuth2 service var oAuth2Service = new ApiClient.OAuth2.OAuth2Service(_clientSettings); var scopes = ""; // create Authorize url and send call it thru Process.Start var authUrl = oAuth2Service.GenerateAuthUrl(scopes); Process.Start(authUrl); // get the URL returned from the callback(RedirectUri) var context = await httpListener.GetContextAsync(); // Done with the callback, so stop the HttpListener httpListener.Stop(); // exact the query parameters from the returned URL var queryString = context.Request.Url.Query; var queryColl = HttpUtility.ParseQueryString(queryString); // Grab the needed query parameter code from the query collection var code = queryColl["code"]; Console.WriteLine($"Using code {code}"); // Pass the returned code value to finish the OAuth2 authorization var result = await oAuth2Service.FinishAuthorization(code); // Check if you got an error during finishing the OAuth2 authorization if (result.IsError) { Console.WriteLine("\n\nError : {0}", result.Error); Console.WriteLine("\n\nError.Description: {0}", result.ErrorDescription); } else { // Display the Access Token and Refresh Token to the Console. Console.WriteLine(); Console.WriteLine("Access token : {0}", result.AccessToken); Console.WriteLine("Refresh token: {0}", result.RefreshToken); Console.WriteLine("Expires in : {0}", result.ExpiresIn); _clientSettings.UpdateAndSave(result); Console.WriteLine("After a good refresh"); Console.WriteLine(_clientSettings.ToString()); } }