我已经使用此处的指南在我的 .net core mvc 应用程序中设置了 2 因素身份验证 这一切都工作正常,但它依赖于用户进入他们的帐户并设置 2FA。有什么方法可以强制用户这样做,以便所有用户都必须使用2FA?
我有点晚了。但执行此操作的方法是创建自定义控制器并重写 OnActionExecute 方法。
public class CustomController : Controller
{
public readonly DataContext _db;
public CustomController(DataContext context)
{
_db = context;
}
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
if (User.Identity.IsAuthenticated)
{
var userId = User.FindFirstValue(ClaimTypes.NameIdentifier);
UserModel user = _db.UserModel.Find(userId);
if (user.TwoFactorEnabled==false && ControllerContext.ActionDescriptor.ActionName != "TwoFactor")
{
filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary(new { controller = "Home", action = "TwoFactor" }));
return;
}
}
base.OnActionExecuting(filterContext);
}
}
一种方法是在登录期间检查用户是否通过以下方式设置了 2FA:
var user = await _userManager.FindByEmailAsync(Input.Email);
var twoFactorEnabled = user.TwoFactorEnabled;
如果为 false,则可以重定向用户配置2FA页面(./Manage/TwoFactorAuthentication
(,在用户设置2FA并启用2FA后,AspNetUsers
表中的TwoFactorEnabled
将被True
,然后在登录过程中,如果当前用户的TwoFactorEnabled
值为true,身份将自动将用户重定向到./LoginWith2fa
页面进行2FA登录。