Ошибка аутентификации asp.net сбрасывается самостоятельно - PullRequest
0 голосов
/ 15 октября 2018

У меня есть логин, который использует функции аутентификации asp.net и блокирует пользователей вне системы, если они несколько раз неправильно вводят свой пароль.

Когда пользователь неправильно вводит свой пароль, [Поле AccessFailedCount] увеличивается на 1 каждый раз (в таблице dbo.AspNetUsers), как и предполагалось.

Однако при последней попытке (скажем, 5-й) перед тем, как на экране появится сообщение об ошибке, чтобы показать пользователям, что онизаблокирован, [AccessFailedCount] сбрасывается обратно в 0, что не позволяет мне видеть, сколько раз эта учетная запись пользователя не могла войти в систему.

Блок кода, который получает удар, как показано ниже:

        var result = await SignInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, true);
        switch (result)
        {
            case SignInStatus.Success:
                return RedirectToLocal(returnUrl);
            case SignInStatus.LockedOut:
                var lockoutMessage = WebConfigurationManager.AppSettings["LockoutMessage"];
                ModelState.AddModelError("", lockoutMessage);
                return View(model);
            case SignInStatus.RequiresVerification:
                return RedirectToAction("SendCode", new { ReturnUrl = returnUrl, RememberMe = model.RememberMe });
            case SignInStatus.Failure:
            default:
                ModelState.AddModelError("", "Please check your credentials and try again.");
                // Incorrect login info.
                return View(model);
        }

Когда пользователь неправильно вводит свой пароль, случай «Отказ» получает удар 4 раза, затем случай «LockedOut» получает удар, и [AccessFailedCount] сбрасывается до 0.

Кажется, это происходитгде-то в методе PasswordSignInAsync, так как счетчик уже установлен в 0 до того, как будут затронуты случаи.

Есть ли способпредотвратить такое поведение (вообще)?Я бы заподозрил, что в любом случае поле [AccessFailedCount] следует сбрасывать, только если пользователь успешно вошел в систему, но оно сбрасывается, даже когда пользователь получает сообщение об ошибке, в котором говорится, что он не может войти в систему в течение установленного периода времени.

Похоже, это встроенная функция аутентификации asp.net, но я не уверен, как предотвратить сброс поля [AccessFailedCount].

Ответы [ 2 ]

0 голосов
/ 21 апреля 2019

AccessFailed сбрасывается до 0 в конце цикла «сбой» по конструкции.

После достижения максимального числа попыток AccessFailed сбрасывается до 0 и LockoutEndDateUtc устанавливается снова.У вас есть доступ только к числу неудачных попыток в каждом цикле fail.

0 голосов
/ 15 октября 2018

Когда я начал читать ваш вопрос, я предположил, что когда пользователь вводит неверный пароль, AccessFailedCount увеличивается на 1, пока не достигнет определенного порогового значения, скажем 5. Достигнув порогового значения, он возвращается к 0, сбрасывается иаккаунт действительно заблокирован.

Блокировка реализуется путем изменения LockoutEndDateUtc.Я рекомендую проверить значение exat порогового числа.Также следите за полями LockoutEndDateUtc и LockoutEnabled.

...