ASP Net 身份两因素身份验证最后一个过期令牌已成功验证

问题描述 投票:0回答:1

我使用 ASP Net 身份和两因素身份验证进行用户登录。

我正在生成这样的两个因素 OTP

var token = await _userManager.GenerateTwoFactorTokenAsync(user, TokenOptions.DefaultEmailProvider);

我通过电子邮件将此 OTP 发送给用户,然后让用户使用此 OTP 登录,这是我用来使用令牌验证两因素身份验证的代码

var user = await _signInManager.GetTwoFactorAuthenticationUserAsync();

var signIn = await _signInManager.TwoFactorSignInAsync(TokenOptions.DefaultEmailProvider, code, false, false);

if (signIn.Succeeded)
{
   // further code
}

OTP 的默认超时为 3 分钟,我知道这不是 OPT,而是 TOTP,因此如果我尝试在 3 分钟内生成令牌,我会得到与前一个相同的 OTP。

这对我来说很好。

问题是,即使过了 3 分钟并生成了新的 OTP,当我尝试最后一个 OTP(应该已过期,这就是生成新 OTP 的原因)时,它也可以工作并允许用户登录.

这种行为是完全错误的,一旦生成新的 OTP,旧的 OTP 就永远不会工作。

如果我在代码中做错了什么,有人可以指导我吗?或者有没有办法纠正这种行为?

c# .net-core asp.net-identity two-factor-authentication
1个回答
0
投票

TOTP 和 OTP 之间的区别

OTP 和 TOTP 是两种类型的安全机制,通常执行 相同的功能:验证用户身份以进行身份验证。

一次性密码 (OTP) - OTP 是一种静态密码, 使用一次后无效。与您注册的密码不同,它 多次无效。

基于时间的一次性密码 (TOTP) - TOTP 是一种基于时间的 OTP, 要求用户在给定时间内输入 OTP。这个窗口的 在 TOTP 中输入代码的时间通常为 30 到 60 秒。 此后,TOTP 过期,您必须获得新的 TOTP。

OTP 与 TOTP 主要区别 - TOTP 和 OTP 的不同之处在于它们的持续时间 生成的代码最后,即它们的有效性。大多数传统的OPT是 基于计数器,即每个登录会话都需要一个新的 OTP 生成。

TOTP 是基于时间的,即 OTP 在指定时间内保持有效 时间范围 – 通常为 30 到 60 秒,之后到期并生成新的 如果您未能在该时间内输入 TOTP,则必须生成 TOTP。

https://instasafe.com/blog/whats-the-difference- Between-otp-and-totp/

因此,无论何时发生,OTP 将在首次使用时过期,而 TOTP 可能会及时过期。因此,如果您希望令牌超时,则需要使用 TOTP 而不是 OTP。如果通过电子邮件发送令牌,您确定要在 3 分钟后使其失效吗?如果这个人验证速度不够快怎么办?

但是,如果您希望在令牌没有及时用完的情况下发生超时,则需要切换到使用 TOTP 而不是 OTP。

© www.soinside.com 2019 - 2024. All rights reserved.