public async Task <JObject> GetUserInfoAsync(string accessToken) { var provider = await _tokenExchangeProviderStore.GetProviderByNameAsync(TokenExchangeProviders.Twitter); ExternalTokenExchangeProviderHelper.CheckNotNull(provider); var request = new Dictionary <string, string>(); request.Add("tokenString", accessToken); request.Add("endpoint", provider.UserInfoEndpoint); var authorizationHeaderParams = QueryBuilder.GetQuery(request, TokenExchangeProviders.Twitter); _client.DefaultRequestHeaders.Clear(); _client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/x-www-form-urlencoded")); _client.DefaultRequestHeaders.Add("Authorization", authorizationHeaderParams); var result = await _client.GetAsync(provider.UserInfoEndpoint); if (result.IsSuccessStatusCode) { var infoObject = JObject.Parse(await result.Content.ReadAsStringAsync()); return(infoObject); } return(null); }
public async Task <JObject> GetUserInfoAsync(string accessToken) { var provider = await _tokenExchangeProviderStore.GetProviderByNameAsync(TokenExchangeProviders.LinkedIn); ExternalTokenExchangeProviderHelper.CheckNotNull(provider); var urlParams = $"oauth2_access_token={accessToken}&format=json"; var result = await _client.GetAsync($"{provider.UserInfoEndpoint}{urlParams}"); if (result.IsSuccessStatusCode) { var infoObject = JObject.Parse(await result.Content.ReadAsStringAsync()); return(infoObject); } return(null); }
public async Task <JObject> GetUserInfoAsync(string accessToken) { var provider = await _tokenExchangeProviderStore.GetProviderByNameAsync(TokenExchangeProviders.Google); ExternalTokenExchangeProviderHelper.CheckNotNull(provider); var request = new Dictionary <string, string>(); request.Add("token", accessToken); var result = await _client.GetAsync(provider.UserInfoEndpoint + QueryBuilder.GetQuery(request, TokenExchangeProviders.Google)); if (result.IsSuccessStatusCode) { var infoObject = JObject.Parse(await result.Content.ReadAsStringAsync()); return(infoObject); } return(null); }
public async Task <JObject> GetUserInfoAsync(string accessToken) { var provider = await _tokenExchangeProviderStore.GetProviderByNameAsync(TokenExchangeProviders.Facebook); if (provider == null) { throw new ArgumentNullException(nameof(provider)); } var request = new Dictionary <string, string> { { "fields", provider.Fields }, { "access_token", accessToken } }; var result = await _client.GetAsync(provider.UserInfoEndpoint + QueryBuilder.GetQuery(request, TokenExchangeProviders.Facebook)); if (result.IsSuccessStatusCode) { var infoObject = JObject.Parse(await result.Content.ReadAsStringAsync()); return(infoObject); } return(null); }
public async Task ValidateAsync(ExtensionGrantValidationContext context) { try { var providerName = context.Request.Raw.Get(TokenExchangeGrantParameters.Provider); var externalToken = context.Request.Raw.Get(TokenExchangeGrantParameters.ExternalToken); var requestEmail = context.Request.Raw.Get(TokenExchangeGrantParameters.Email); if (string.IsNullOrWhiteSpace(providerName)) { context.Result = GrantValidationResultHelpers.Error(TokenExchangeErrors.InvalidProvider); return; } if (string.IsNullOrWhiteSpace(externalToken)) { context.Result = GrantValidationResultHelpers.Error(TokenExchangeErrors.InvalidExternalToken); return; } var provider = await _providerStore.GetProviderByNameAsync(providerName); if (provider == null) { context.Result = GrantValidationResultHelpers.Error(TokenExchangeErrors.ProviderNotFound); return; } var tokenService = _tokenServiceAccessor(providerName); var userInfo = await tokenService.GetUserInfoAsync(externalToken); if (userInfo == null) { context.Result = GrantValidationResultHelpers.Error(TokenExchangeErrors.UserInfoNotRetrieved); return; } var externalId = userInfo.Value <string>("id"); if (!string.IsNullOrWhiteSpace(externalId)) { var existingUserId = await _externalUserStore.FindByProviderAsync(providerName, externalId); if (!string.IsNullOrWhiteSpace(existingUserId)) { var claims = await _externalUserStore.GetUserClaimsByExternalIdAsync(externalId); context.Result = GrantValidationResultHelpers.Success(existingUserId, providerName, claims); } } if (string.IsNullOrWhiteSpace(requestEmail)) { context.Result = await _nonEmailUserProcessor.ProcessAsync(userInfo, providerName); return; } context.Result = await _emailUserProcessor.ProcessAsync(userInfo, requestEmail, providerName); } catch (Exception e) { context.Result = GrantValidationResultHelpers.Error(e.Message); } }