我正在将ASP.NET Core 2.2用于Web服务器,每次用户登录到网站时,输入正确的电子邮件和密码后,我需要发送包含 4位PIN码的消息到用户电子邮件,以用作电子邮件两因素身份验证,并且此PIN码应在发送后10分钟后失效。
我可以手动执行此操作(生成随机PIN码,将其保存在数据库中,使用if语句验证它们,等等...),这可以工作,但是我创建了这个问题,询问如何使用ASP.NET核心2可用功能(可以为我节省数据库表)。
我尝试UserManager.GenerateTwoFactorTokenAsync(TUser, String) Method生成令牌并将其发送到电子邮件:
var token = await _userManager.GenerateTwoFactorTokenAsync(user, "Default");
SendLoginTokenToUserEmail(user, token);
并使用UserManager.VerifyTwoFactorTokenAsync(TUser, String, String)进行验证:
var verified = await _userManager.VerifyTwoFactorTokenAsync(user, "Default", token);
这很好用,但是我的问题是生成的令牌不是4位PIN码,并且它的到期时间不是10分钟(我认为默认值为1天)。
所以,我的问题是:如何通过UserManager为ASP.NET Core 2.2中的两因素身份验证自定义生成的令牌?
可以通过创建自定义令牌提供程序来完成此操作吗? (我在这里使用默认令牌提供程序)如果这样做,请问该怎么做?我花了几个小时浏览Docs和ASP.NET Core 2文章,但没有找到我需要的东西。
PS:如果有除UserManager之外的其他方法,我会不知所措,但是我认为这可能是最好的方法,尤其是UserManager在我们系统中的每个地方都使用(用于登录,密码重置等)。 ...)。