单次使用后如何使两因素身份验证令牌过期

Ege*_*rak 5 two-factor-authentication asp.net-mvc-5

我实现了两因素身份验证,但按照本教程

https://docs.microsoft.com/en-us/aspnet/identity/overview/features-api/two-factor-authentication-using-sms-and-email-with-aspnet-identity

我想让代码在单次使用后过期。

现在,用户在到期时间(设置为 5 分钟)完成期间收到相同的代码。有没有办法让代码一次性使用?我找不到关于这个主题的任何内容。

phi*_*ash 5

您链接到的教程中有一条注释说:

2FA 代码是使用基于时间的一次性密码算法生成的,代码的有效期为六分钟。如果您输入代码的时间超过六分钟,您将收到“代码无效”错误消息。

因此,使用此方法,您无法使代码在用户使用后过期。

作为补充,您可以保留已使用的代码存储,并在验证代码之前对照该存储进行检查。您可以允许代码在 6 分钟后(这是它们的自然到期时间)在该商店中过期,但同时使用它们来拒绝第二次身份验证。

或者,您可以选择避免使用 TOTP 方法,并生成一个随机代码,在发送短信或电子邮件之前针对您的用户存储该代码。然后,当用户使用该代码进行身份验证时,您可以检查该代码,并在此时删除或使该代码无效。使用 TOTP 意味着您可以扩展此 2FA,以使用基于身份验证器应用程序的流程进行身份验证,这比 SMS 或电子邮件更安全。