public async Task <IActionResult> GoogleExternalLogin([FromBody] ExternalAuthenticationRequestModel externalAuth) { var payload = await _jwtHandler.VerifyGoogleToken(externalAuth); if (payload == null) { return(Unauthorized("Invalid External Authentication.")); } var user = await signUserWithExternal(payload.Subject, payload.Name, payload.Email, externalAuth.Provider); if (user == null) { return(StatusCode(401, new AuthenticationResponseModel { ErrorMessage = "Authentication error" })); } if (user.IsBanned) { return(StatusCode(401, new AuthenticationResponseModel { ErrorMessage = "User is banned" })); } var tokens = await _jwtHandler.GenerateTokensForUser(user); return(Ok(new AuthenticationResponseModel { IsAuthSuccessful = true, Tokens = tokens })); }
public async Task <GoogleJsonWebSignature.Payload> VerifyGoogleToken(ExternalAuthenticationRequestModel externalAuth) { try { var settings = new GoogleJsonWebSignature.ValidationSettings() { Audience = new List <string>() { _goolgeSettings.GetSection("clientId").Value } }; var payload = await GoogleJsonWebSignature.ValidateAsync(externalAuth.IdToken, settings); return(payload); } catch { return(null); } }