Exemplo n.º 1
0
        private GoogleApiTokenInfo GetGoogleApiTokenInfo(ExternalAuthRequest externalAuthRequest)
        {
            const string url        = "https://www.googleapis.com/oauth2/v3/tokeninfo?id_token={0}";
            var          httpClient = new HttpClient();

            var requestUri = new Uri(string.Format(url, externalAuthRequest.Token));

            HttpResponseMessage httpResponseMessage;

            try
            {
                httpResponseMessage = httpClient.GetAsync(requestUri).Result;
            }
            catch
            {
                return(null);
            }

            if (httpResponseMessage.StatusCode != HttpStatusCode.OK)
            {
                return(null);
            }

            var response           = httpResponseMessage.Content.ReadAsStringAsync().Result;
            var googleApiTokenInfo = JsonConvert.DeserializeObject <GoogleApiTokenInfo>(response);

            return(googleApiTokenInfo);
        }
Exemplo n.º 2
0
        private FacebookApiTokenInfo GetFacebookApiTokenInfo(ExternalAuthRequest externalAuthRequest)
        {
            const string url        = "https://graph.facebook.com/{0}?access_token={1}&fields={2}";
            var          httpClient = new HttpClient();

            var requestUri = new Uri(string.Format(url, externalAuthRequest.UserId, externalAuthRequest.Token, "first_name,last_name,locale,gender,name,email"));

            HttpResponseMessage httpResponseMessage;

            try
            {
                httpResponseMessage = httpClient.GetAsync(requestUri).Result;
            }
            catch (Exception ex)
            {
                throw new ApiException(ex.Message);
            }

            if (httpResponseMessage.StatusCode != HttpStatusCode.OK)
            {
                return(null);
            }

            var response             = httpResponseMessage.Content.ReadAsStringAsync().Result;
            var facebookApiTokenInfo = JsonConvert.DeserializeObject <FacebookApiTokenInfo>(response);

            return(facebookApiTokenInfo);
        }
 public async Task <IActionResult> Post([FromBody] ExternalAuthRequest externalAuthRequest)
 {
     //string BearerToken = Request.Headers["Authorization"].ToString();
     //if (string.IsNullOrEmpty(BearerToken))
     //    return Ok(false);
     //var tokenArray = BearerToken.Split(" ").ToArray();
     //var token = tokenArray[1];
     return(Ok(await _externalAuthService.ExternalAuthenticateAsync(externalAuthRequest, GenerateIPAddress())));
 }
Exemplo n.º 4
0
        public async Task <Response <AuthenticationResponse> > ExternalAuthenticateAsync(ExternalAuthRequest externalAuthRequest, string ipAddress)
        {
            ApplicationUser user = null;

            if (externalAuthRequest.Type == "google")
            {
                var GoogleApiTokenInfo = GetGoogleApiTokenInfo(externalAuthRequest);
                if (GoogleApiTokenInfo == null)
                {
                    throw new ApiException($"Invalid Credentials");
                }
                user = await _userManager.FindByEmailAsync(GoogleApiTokenInfo.email);

                if (user == null)
                {
                    user = new ApplicationUser
                    {
                        Email          = GoogleApiTokenInfo.email,
                        FirstName      = GoogleApiTokenInfo.given_name,
                        LastName       = GoogleApiTokenInfo.family_name,
                        UserName       = GoogleApiTokenInfo.sub,
                        EmailConfirmed = true,
                        ProfilePicture = null,
                        IsActive       = true
                    };
                    var result = await _userManager.CreateAsync(user);

                    if (result.Succeeded)
                    {
                        await _userManager.AddToRoleAsync(user, Roles.Basic.ToString());
                    }
                    else
                    {
                        throw new ApiException($"Invalid Credentials");
                    }
                }
            }
            else if (externalAuthRequest.Type == "facebook")
            {
                var FacebookApiTokenInfo = GetFacebookApiTokenInfo(externalAuthRequest);
                if (FacebookApiTokenInfo == null)
                {
                    throw new ApiException($"Invalid Credentials");
                }
                user = await _userManager.FindByEmailAsync(FacebookApiTokenInfo.email);

                if (user == null)
                {
                    user = new ApplicationUser
                    {
                        Email          = FacebookApiTokenInfo.email,
                        FirstName      = FacebookApiTokenInfo.first_name,
                        LastName       = FacebookApiTokenInfo.last_name,
                        UserName       = FacebookApiTokenInfo.id,
                        EmailConfirmed = true,
                        ProfilePicture = null,
                        IsActive       = true
                    };
                    var result = await _userManager.CreateAsync(user);

                    if (result.Succeeded)
                    {
                        await _userManager.AddToRoleAsync(user, Roles.Basic.ToString());
                    }
                    else
                    {
                        throw new ApiException($"Invalid Credentials");
                    }
                }
            }


            JwtSecurityToken jwtSecurityToken = await TokenHelper.GenerateJWToken(user, _userManager, _jwtSettings);

            AuthenticationResponse response = new AuthenticationResponse();

            response.Id          = user.Id;
            response.AccessToken = new JwtSecurityTokenHandler().WriteToken(jwtSecurityToken);
            response.Email       = user.Email;
            response.UserName    = user.UserName;
            var rolesList = await _userManager.GetRolesAsync(user).ConfigureAwait(false);

            response.Roles      = rolesList.ToList();
            response.IsVerified = user.EmailConfirmed;
            var refreshToken = TokenHelper.GenerateRefreshToken(ipAddress);

            response.RefreshToken = refreshToken.Token;
            return(new Response <AuthenticationResponse>(response, $"Authenticated {user.UserName}"));
        }