我已经尝试为我的Web应用程序实施多因素身份验证。
我能够根据我的登录用户生成一个Authenticator-Key。使用Google Authenticator,我可以生成代码。当我验证此代码时出现问题。 (这是一个基于时间的代码)
由于某种原因,我的_userManager.VerifyTwoFactorTokenAsync(...)
似乎在代码未过期时不起作用,但是一旦Google Authenticator应用中的代码更改,现在相同的“过期”代码即有效,现在我已重定向并登录。
这是我的令牌生成器代码:
var user = await _userManager.GetUserAsync(User);
var authenticatorKey = await _userManager.GetAuthenticatorKeyAsync(user);
if (authenticatorKey == null)
{
await _userManager.ResetAuthenticatorKeyAsync(user);
authenticatorKey = await _userManager.GetAuthenticatorKeyAsync(user);
}
return View(new RegisterAuthenticatorViewModel { AuthenticatorKey = authenticatorKey });
这是我的代码验证代码:
var user = await _userManager.GetUserAsync(User);
var isValid = await _userManager.VerifyTwoFactorTokenAsync(user,
_userManager.Options.Tokens.AuthenticatorTokenProvider, model.Code);
if (!isValid)
{
ModelState.AddModelError(string.Empty, "Code is invalid");
return View(model);
}
await _userManager.SetTwoFactorEnabledAsync(user, true);
return View("_Success");
由于该代码实际上是有效的,所以我的问题是,为什么它只有在Google Authenticator App过期后才对代码进行验证。