public async Task <IActionResult> ExternalLogin([FromBody] ExternalAuth externalAuth)
        {
            Payload payload = await _authService.VerifyGoogleToken(externalAuth);

            string token = await _authService.GenerateToken(payload);

            return(Ok(new AuthResponse {
                Token = token, IsAuthenticaded = true
            }));
        }
        public async Task <GoogleJsonWebSignature.Payload> VerifyGoogleToken(ExternalAuth externalAuth)
        {
            var settings = new GoogleJsonWebSignature.ValidationSettings()
            {
                Audience = new List <string>()
                {
                    _appSettings.ClientId
                }
            };

            return(await GoogleJsonWebSignature.ValidateAsync(externalAuth.IdToken, settings));
        }
Ejemplo n.º 3
0
        public async Task <IActionResult> Facebook([FromBody] ExternalAuth model)
        {
            var appAccessTokenResponse = await Client.GetStringAsync($"https://graph.facebook.com/oauth/access_token?client_id=500263577156314&client_secret=eb82d0f1cbb41f3d9fe2b4931b377783&grant_type=client_credentials");

            var appAccessToken = JsonConvert.DeserializeObject <FacebookAppAccessToken>(appAccessTokenResponse);

            var userAccessTokenValidationResponse = await Client.GetStringAsync($"https://graph.facebook.com/debug_token?input_token={model.AccessToken}&access_token={appAccessToken.AccessToken}");

            var userAccessTokenValidation = JsonConvert.DeserializeObject <FacebookUserAccessTokenValidation>(userAccessTokenValidationResponse);

            if (!userAccessTokenValidation.Data.IsValid)
            {
                return(BadRequest());
            }

            var userInfoResponse = await Client.GetStringAsync($"https://graph.facebook.com/v2.8/me?fields=id,email,first_name,last_name,name,gender,locale,birthday&access_token={model.AccessToken}");

            var userInfo = JsonConvert.DeserializeObject <FacebookUserData>(userInfoResponse);

            var user = await _userManager.FindByEmailAsync(userInfo.Email);


            if (user == null)
            {
                var appUser = new AppUser
                {
                    Email          = userInfo.Email,
                    UserName       = userInfo.Email,
                    AccountCreated = DateTime.Now,
                };

                var result = await _userManager.CreateAsync(appUser, Convert.ToBase64String(Guid.NewGuid().ToByteArray()).Substring(0, 8));

                if (!result.Succeeded)
                {
                    return(BadRequest());
                }
                user = await _userManager.FindByEmailAsync(userInfo.Email);
            }

            await _signInManager.SignInAsync(user, isPersistent : false);

            return(Ok());
        }