ASP.Net Indentity - 启用双因素身份验证的用户自动登录

时间:2017-09-29 14:51:15

标签: asp.net asp.net-identity two-factor-authentication

我们在当前网站上通过短信使用双因素身份验证。一旦用户验证了他们的电话号码,我们认为要求偶尔进行随机检查作为额外的安全层是个好主意。

要启用此功能,我将其放在控制器上的Login方法中:

var result = await SignInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, shouldLockout: true);
switch (result)
{
    // other cases
    case SignInStatus.RequiresVerification:
        int challengeFrequency = Convert.ToInt16(ConfigurationManager.AppSettings["ChallengeFrequency"]);
        Random rnd = new Random();
        if (rnd.Next(1, challengeFrequency + 1) == 1)
        {
            return RedirectToAction("SendCode", new { returnUrl = returnUrl });
        }
        else
        {
            var token = await UserManager.GenerateTwoFactorTokenAsync(user.Id, "Phone Code");
            await SignInManager.TwoFactorSignInAsync("Phone Code", token, false, false);
            return RedirectToLocal(returnUrl);
        }
}

但是当用户提出质疑时,这会导致他们必须先登录两次才能进入网站。

单步执行代码我可以看到它正在按预期生成电话验证令牌。我理解对TwoFactorSignInAsync的调用应该等到登录过程完成后再继续。但是在第一遍User.Identity.IsAuthenticated是假的,而在第二遍,它是真的。

为什么第一次尝试时无法登录用户,但第二次尝试成功?

0 个答案:

没有答案