Я пытался реализовать многофакторную аутентификацию для моего веб-приложения.
Я могу сгенерировать ключ аутентификации на основе моего авторизованного пользователя. Используя 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.