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);
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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);
        }
コード例 #4
0
        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);
        }
コード例 #5
0
        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);
            }
        }