Exemplo n.º 1
0
        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));
        }
Exemplo n.º 2
0
        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
            }));
        }
Exemplo n.º 4
0
        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
            }));
        }
Exemplo n.º 5
0
        public async Task <IActionResult> FacebookSignIn(FacebookAuthRequest request)
        {
            var response = await _authRepo.FacebookSignIn(request.Token);

            return(HandleServiceResponse(response));
        }