public async Task <IActionResult> Facebook([FromBody] FacebookAuthRequest model) { var token = await this.externalAuthService.ExternalLoginOrRegister(model.AccessToken); if (token == null) { this.ModelState.TryAddModelError("external_auth_failure", "Failed to create local user account."); return(this.BadRequest(this.ModelState)); } return(this.Ok(token)); }
public async Task <ActionResult <AuthenticationResponse> > GetFacebookJWT([FromBody] FacebookAuthRequest facebookAuthRequest) { // 1.create a token and an http client string token = string.Empty; var httpClient = _httpClientFactory.CreateClient(); // 2.get AppId and AppSecrete // string appId = _configuration["Authentication:Facebook:AppId"]; // string appSecrete = _configuration["Authentication:Facebook:AppSecrete"]; // Console.WriteLine("\nApp Id : " + appId); // Console.WriteLine("Secrete Id : " + appSecrete + "\n"); // // 3. generate an app access token // var appAccessRequest = $"https://graph.facebook.com/oauth/access_token?client_id={appId}&client_secret={appSecrete}&grant_type=client_credentials"; // var appAccessTokenResponse = await httpClient.GetFromJsonAsync<FacebookAppAccessToken>(appAccessRequest); // Console.WriteLine("App Access Token : " + appAccessTokenResponse.Access_Token); // Console.WriteLine("Auth Request Access Token : " + facebookAuthRequest.AccessToken + "\n"); // // 4. validate the user access token // var userAccessValidationRequest = $"https://graph.facebook.com/debug_token?input_token={facebookAuthRequest.AccessToken}&access_token={appAccessTokenResponse.Access_Token}"; // var userAccessTokenValidationResponse = await httpClient.GetFromJsonAsync<FacebookUserAccessTokenValidation>(userAccessValidationRequest); // Console.WriteLine("Is Token Valid : " + userAccessTokenValidationResponse.Data?.Is_Valid + "\n"); // if (!userAccessTokenValidationResponse.Data.Is_Valid) // return BadRequest(); // 5. we've got a valid token so we can request user data from facebook var userDataRequest = $"https://graph.facebook.com/v11.0/me?fields=id,email,first_name,last_name,name,gender,locale,birthday,picture&access_token={facebookAuthRequest.AccessToken}"; var facebookUserData = await httpClient.GetFromJsonAsync <FacebookUserData>(userDataRequest); Console.WriteLine("Facebook Email Address : " + facebookUserData.Email + "\n"); //6. try to find the user in the database or create a new account var loggedInUser = await GetUserByEmailAddress(facebookUserData.Email); //7. generate the token if (loggedInUser == null) { loggedInUser = await CreateExternalUser(facebookUserData.Email); } token = GenerateJwtToken(loggedInUser); Console.WriteLine("JWT : " + token + "\n"); httpClient.Dispose(); return(await Task.FromResult(new AuthenticationResponse() { Token = token })); }
public async Task <IActionResult> FacebookAuth([FromBody] FacebookAuthRequest request) { var authResponse = await _delivermanService.FacebookLoginDeliverymanAsync(request.AccessToken); if (!authResponse.Success) { return(BadRequest(new AuthFailedResponse { Errors = authResponse.Errors })); } return(Ok(new AuthSuccessResponse { Token = authResponse.Token })); }
public async Task <ActionResult <AuthenticationResponse> > GetFacebookJWT([FromBody] FacebookAuthRequest facebookAuthRequest) { // 1.create a token and an http client string token = string.Empty; var client = _httpClientFactory.CreateClient(); // 2.get AppId and AppSecrete string appId = _configuration["Authentication:Facebook:AppId"]; string appSecrete = _configuration["Authentication:Facebook:AppSecrete"]; Console.WriteLine("\nApp Id : " + appId); Console.WriteLine("Secrete Id : " + appSecrete + "\n"); // 3. generate an app access token var appAccessRequest = $"https://graph.facebook.com/oauth/access_token?client_id={appId}&client_secret={appSecrete}&grant_type=client_credentials"; var appAccessTokenResponse = await client.GetFromJsonAsync <FacebookAppAccessToken>(appAccessRequest); Console.WriteLine("App Access Token : " + appAccessTokenResponse.Access_Token); Console.WriteLine("Auth Request Access Token : " + facebookAuthRequest.AccessToken + "\n"); // 4. validate the user access token var userAccessValidationRequest = $"https://graph.facebook.com/debug_token?input_token={facebookAuthRequest.AccessToken}&access_token={appAccessTokenResponse.Access_Token}"; var userAccessTokenValidationResponse = await client.GetFromJsonAsync <FacebookUserAccessTokenValidation>(userAccessValidationRequest); Console.WriteLine("Is Token Valid : " + userAccessTokenValidationResponse.Data?.Is_Valid + "\n"); if (!userAccessTokenValidationResponse.Data.Is_Valid) { return(BadRequest()); } // 5. we've got a valid token so we can request user data from facebook var userDataRequest = $"https://graph.facebook.com/v11.0/me?fields=id,email,first_name,last_name,name,gender,locale,birthday,picture&access_token={facebookAuthRequest.AccessToken}"; var facebookUserData = await client.GetFromJsonAsync <FacebookUserData>(userDataRequest); Console.WriteLine("Facebook Email Address : " + facebookUserData.Email + "\n"); //6. try to find the user in the database or create a new account var loggedInUser = await _context.Users.Where(user => user.EmailAddress == facebookUserData.Email).FirstOrDefaultAsync(); //7. generate the token if (loggedInUser == null) { loggedInUser = new User(); loggedInUser.UserId = _context.Users.Max(user => user.UserId) + 1; loggedInUser.EmailAddress = User.FindFirstValue(ClaimTypes.Email); loggedInUser.Password = Utility.Encrypt(loggedInUser.EmailAddress); loggedInUser.Source = "EXTL"; _context.Users.Add(loggedInUser); await _context.SaveChangesAsync(); } token = GenerateJwtToken(loggedInUser); Console.WriteLine("JWT : " + token + "\n"); return(await Task.FromResult(new AuthenticationResponse() { Token = token })); }
public async Task <IActionResult> FacebookSignIn(FacebookAuthRequest request) { var response = await _authRepo.FacebookSignIn(request.Token); return(HandleServiceResponse(response)); }