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)); }
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()); }