private async Task <AccessTokenModel> PerformCodeExchangeAsync(string code, Auth0UserInfo auth0UserInfo, ILogger logger, CancellationToken cancellationToken) { logger.LogInformation($"Exchanging authorization code '{code}' for tokens for client {auth0UserInfo.UserId} {auth0UserInfo.Name}..."); ExchangeTokenModel exchangeTokenModel = new ExchangeTokenModel() { ClientId = _configuration["Strava:ClientId"], ClientSecret = _configuration["Strava:ClientSecret"], AuthorizationCode = code }; var json = JsonConvert.SerializeObject(exchangeTokenModel); HttpResponseMessage response = await _httpClient.PostAsync(new Uri($"https://www.strava.com/oauth/token"), new StringContent(json, Encoding.UTF8, "application/json"), cancellationToken); response.EnsureSuccessStatusCode(); string responseBody = await response.Content.ReadAsStringAsync(); logger.LogInformation($"Received token response from Strava: '{responseBody}'"); AccessTokenModel accessTokenModel = JsonConvert.DeserializeObject <AccessTokenModel>(responseBody); logger.LogInformation($"Parsed Access token: '{accessTokenModel.AccessToken}', expires at '{accessTokenModel.ExpiresAt}'"); return(accessTokenModel); }
public IActionResult ExchangeToken([FromBody] ExchangeTokenModel model) { try { ExchangeTokenDTO newTokens = _userService.ExchangeToken(model.Token, model.RefreshToken); return(Ok(newTokens)); } catch (Exception ex) { return(BadRequest(new { Message = ex.Message })); } }