Example #1
0
        /// <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);
        }
Example #2
0
        /// <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);
        }
Example #3
0
        /// <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());
            }
        }