Exemplo n.º 1
0
        public async Task <IActionResult> OnPostAsync(string returnUrl = null)
        {
            returnUrl = returnUrl ?? Url.Content("~/");

            if (ModelState.IsValid)
            {
                // This doesn't count login failures towards account lockout
                // To enable password failures to trigger account lockout, set lockoutOnFailure: true
                var result = await _signInManager.PasswordSignInAsync(Input.Email, Input.Password, Input.RememberMe, lockoutOnFailure : true);

                if (result.Succeeded)
                {
                    _logger.LogInformation("User logged in.");
                    var tokenString = AuthTokenUtil.GetJwtTokenString(Input.Email, _config);
                    return(new ObjectResult(tokenString));
                }
                if (result.RequiresTwoFactor)
                {
                    return(RedirectToPage("./LoginWith2fa", new { ReturnUrl = returnUrl, RememberMe = Input.RememberMe }));
                }
                if (result.IsLockedOut)
                {
                    _logger.LogWarning("User account locked out.");
                    return(RedirectToPage("./Lockout"));
                }
                else
                {
                    ModelState.AddModelError(string.Empty, "Invalid login attempt.");
                    return(Page());
                }
            }

            // If we got this far, something failed, redisplay form
            return(Page());
        }
Exemplo n.º 2
0
        public async Task <ActionResult <TokenVM> > Login([FromBody] LoginVM loginVM)
        {
            var user = await userManager.FindByEmailAsync(loginVM.Username);

            if (user != null && await userManager.CheckPasswordAsync(user, loginVM.Password) && await userManager.IsEmailConfirmedAsync(user))
            {
                return(Ok(AuthTokenUtil.GetJwtTokenString(user.UserName, userManager, config).Result));
            }
            return(Unauthorized());
        }
        public async Task <IActionResult> Login(LoginModel data)
        {
            // This doesn't count login failures towards account lockout
            // To enable password failures to trigger account lockout, set lockoutOnFailure: true
            var result = await _signInManager.PasswordSignInAsync(data.Username, data.Password, false, lockoutOnFailure : true);

            if (result.Succeeded)
            {
                _logger.LogInformation("User logged in.");
                var tokenString = AuthTokenUtil.GetJwtTokenString(data.Username, _config);
                return(new ObjectResult(tokenString));
            }
            return(Unauthorized());
        }
Exemplo n.º 4
0
        public async Task <ActionResult <TokenVM> > Facebook([FromBody] FacebookAuthViewModel model)
        {
            // 1.generate an app access token
            var appAccessTokenResponse = await client.GetStringAsync($"https://graph.facebook.com/oauth/access_token?client_id={_fbAuthConfiguration.AppId}&client_secret={_fbAuthConfiguration.AppSecret}&grant_type=client_credentials");

            var appAccessToken = JsonConvert.DeserializeObject <FacebookAppAccessToken>(appAccessTokenResponse);
            // 2. validate the user access token
            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());
                /*return BadRequest(Errors.AddErrorToModelState("login_failure", "Invalid facebook token.", ModelState));*/
            }

            // 3. we've got a valid token so we can request user data from fb
            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);

            // 4. ready to create the local user account (if necessary) and jwt
            var user = await userManager.FindByEmailAsync(userInfo.Email);

            if (user == null)
            {
                var appUser = new ApplicationUser
                {
                    Email    = userInfo.Email,
                    UserName = userInfo.Email,
                    FullName = userInfo.LastName + userInfo.FirstName
                };
                var password = "******";
                var result   = await userManager.CreateAsync(appUser, password);

                if (!result.Succeeded)
                {
                    return(BadRequest());
                }
            }

            // generate the jwt for the local user...
            var localUser = await userManager.FindByNameAsync(userInfo.Email);

            await userManager.AddToRoleAsync(localUser, "User"); // Add to "user" role

            return(Ok(AuthTokenUtil.GetJwtTokenString(localUser.UserName, userManager, config).Result));
        }
Exemplo n.º 5
0
        public async Task <ObjectResult> Fblogin(string token)
        {
            var AppId     = _config["ApplicationFacebook:AppId"].ToString();
            var AppSecret = _config["ApplicationFacebook:AppSecret"].ToString();

            var appAccessTokenResponse = await Client.GetStringAsync($"https://graph.facebook.com/oauth/access_token?client_id={AppId}&client_secret={AppSecret}&grant_type=client_credentials");

            var appAccessToken = JsonConvert.DeserializeObject <FacebookAppAccessToken>(appAccessTokenResponse);
            // 2. validate the user access token
            var userAccessTokenValidationResponse = await Client.GetStringAsync($"https://graph.facebook.com/debug_token?input_token={token}&access_token={appAccessToken.AccessToken}");

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

            if (!userAccessTokenValidation.Data.IsValid)
            {
                return(BadRequest("false to login with FB"));
            }

            // 3. we've got a valid token so we can request user data from fb
            var userInfoResponse = await Client.GetStringAsync($"https://graph.facebook.com/v2.8/me?fields=id,email,first_name,last_name,name,gender,locale,birthday,picture&access_token={token}");

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

            ExternalLoginInfo info = new ExternalLoginInfo(null, "Facebook", userInfo.Id, "Facebook");

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

            if (user == null)
            {
                var appUser = new ApplicationUser
                {
                    Email       = userInfo.Email,
                    DisplayName = userInfo.Name,
                    UserName    = userInfo.Email
                };

                var result = await _userManager.CreateAsync(appUser);

                var resultLogin = await _userManager.AddLoginAsync(appUser, info);
            }
            else
            {
                var resultLogin = await _userManager.AddLoginAsync(user, info);
            }
            var refreshToken = AuthTokenUtil.GetJwtTokenString(userInfo.Email, _config);

            return(new OkObjectResult(refreshToken));
        }
Exemplo n.º 6
0
        public async Task <ObjectResult> LoginGoogle(string accessToken)
        {
            try
            {
                var payload            = GoogleJsonWebSignature.ValidateAsync(accessToken, new GoogleJsonWebSignature.ValidationSettings()).Result;
                ExternalLoginInfo info = new ExternalLoginInfo(null, "Google", payload.Subject, "Google");
                var resultFindByMail   = await _userManager.FindByEmailAsync(payload.Email);

                var resultFindByLoginExternal = await _userManager.FindByLoginAsync("Google", payload.Subject);

                var tokenString = AuthTokenUtil.GetJwtTokenString(payload.Email, _config);

                var user = new ApplicationUser {
                    UserName = payload.Email, Email = payload.Email, DisplayName = payload.Name
                };
                if (resultFindByMail == null)
                {
                    var resultCreate = await _userManager.CreateAsync(user);

                    if (resultCreate.Succeeded)
                    {
                        var resultLogin = await _userManager.AddLoginAsync(user, info);

                        return(new OkObjectResult(tokenString));
                    }
                }
                else
                {
                    if (resultFindByLoginExternal == null)
                    {
                        var resultLogin = await _userManager.AddLoginAsync(resultFindByMail, info);
                    }
                    await _signInManager.SignInAsync(resultFindByMail, isPersistent : false);
                }

                return(new OkObjectResult(tokenString));
            }
            catch (Exception ex)
            {
                BadRequest(ex.Message);
            }
            return(BadRequest("Error !"));
        }
Exemplo n.º 7
0
        public async Task <IActionResult> Login(LoginModel data)
        {
            var checkUser = await _userManager.FindByNameAsync(data.Username);

            if (checkUser == null)
            {
                return(Unauthorized("Your username hasn't joined our system, please click Sign Up link to register"));
            }
            // This doesn't count login failures towards account lockout
            // To enable password failures to trigger account lockout, set lockoutOnFailure: true
            var result = await _signInManager.PasswordSignInAsync(data.Username, data.Password, false, lockoutOnFailure : true);

            if (result.Succeeded)
            {
                _logger.LogInformation("User logged in.");
                var tokenString = AuthTokenUtil.GetJwtTokenString(data.Username, _config);
                return(new ObjectResult(tokenString));
            }
            return(Unauthorized("Password is incorrect"));
        }