7

我正在将 ASP.NET Core 2.2 用于 Web 服务器,每次用户登录网站时,在输入正确的电子邮件和密码后,我需要向用户电子邮件发送包含4 位 PIN 码的消息,以使用它作为电子邮件两因素身份验证,并且此 PIN 码应在发送后 10 分钟后过期。

我可以手动执行此操作(生成随机 PIN 码,将它们保存在数据库中,使用 if 语句验证它们等...),这会起作用,但我创建了这个问题来询问如何使用可用的 ASP.NET Core 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 天)。

所以,我的问题是:如何在 ASP.NET Core 2.2 中自定义 UserManager 生成的令牌以进行两因素身份验证?

这可以通过创建自定义令牌提供程序来完成吗?(我在这里使用默认令牌提供程序)如果是这样,这样做的步骤是什么?我花了几个小时浏览 Docs 和 ASP.NET Core 2 文章,但没有找到我需要的东西。

PS:如果有除了 UserManager 之外的任何其他方式,我都在听,但我认为这可能是最好的方式,尤其是 UserManager 在我们系统中的任何地方都使用(用于登录,密码重置等......)。

4

0 回答 0