如何在 ASP.NET 核心 MVC 中使用一次性密码 (OTP) 注册手机号码,而不使用 2FA

How to register mobile numbers with One-Time-Password (OTP) in ASP.NET core MVC, not using 2FA

我正在 ASP.Net 核心 MVC 中创建一个应用程序,它需要用户注册并通过仅输入他们的手机 phones 来使用 OTP 进行验证。

我目前正在使用 Twilio 发送短信(不想使用 Twilio 仅验证 Twilio 短信)并且我正在通过随机生成 4 位数字来创建我自己的 OTP。

所以我的问题是:如何使用我在 phone 上获得的这个 4 位 OTP 并注册手机 phone 并确保用户已登录?

我暂时不想实施 2FA,因为它需要用户名和密码。

这个问题类似于: ' 但是已经过去了4年没有答案...

感谢任何帮助,提示or/and更多资源,提前致谢!

OTP 和 User Login/Registration 是两个独立的进程。由开发人员决定 OTP 和 Login/Registration 如何连接。几个月前我已经实施了这个要求。执行此操作的方法如下:

  • 第一步: 用户输入一个有效的 phone 号码。然后将用户重定向到可以输入 OTP 的屏幕(可选 - 上一步中的 phone 号码可以在隐藏字段中)
  • 第二步: 生成 4 位 OTP 并存储 phone 号码和数据库中的 OTP 让我们称之为 'OTP' table.将 OTP 发送给用户
  • 第三步: 在 OTP 输入屏幕上,用户输入 OTP
  • 第 4 步: 检查 'OTP' table 中的 OTP。如果 OTP 有效则:
    • 如果 phone 号码存在于 'User' table 中,那么这是回头客。在第 5 步中登录此用户。您已在 'User' table
    • 中拥有此用户 ID
    • 如果 phone 号码在 'User' table 中不存在,则仅使用 phone 号码创建用户配置文件(您可以获得其他信息,例如稍后命名)。之后在步骤 5
    • 中登录用户
  • 第 5 步: 登录用户。为此,您只需要一个您在上一步中已经拥有的用户实体。要登录,您可以实现任何登录提供程序。我建议使用 JWT(JSON Web Token)进行身份验证。

当您有成功验证 OTP 的用户时,使用用户 ID 对用户进行身份验证。以下是实现 JWT 的方法:

private string GenerateJSONWebToken(UserModel userInfo)    
{    
    var securityKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_config["Jwt:Key"]));    
    var credentials = new SigningCredentials(securityKey, SecurityAlgorithms.HmacSha256);    

    var token = new JwtSecurityToken(_config["Jwt:Issuer"],    
      _config["Jwt:Issuer"],    
      null,    
      expires: DateTime.Now.AddMinutes(120),    
      signingCredentials: credentials);    

    return new JwtSecurityTokenHandler().WriteToken(token);    
}

这将生成一个有效期为 120 分钟的令牌,如下所示:

{    
"token" : "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJKaWduZXNoIFRyaXZlZGkiLCJlbWFpbCI6InRlc3QuYnRlc3RAZ21haWwuY29tIiwiRGF0ZU9mSm9pbmciOiIwMDAxLTAxLTAxIiwianRpIjoiYzJkNTZjNzQtZTc3Yy00ZmUxLTgyYzAtMzlhYjhmNzFmYzUzIiwiZXhwIjoxNTMyMzU2NjY5LCJpc3MiOiJUZXN0LmNvbSIsImF1ZCI6IlRlc3QuY29tIn0.8hwQ3H9V8mdNYrFZSjbCpWSyR1CNyDYHcGf6GqqCGnY"    
}

将 JSON 令牌发送到 application/mobile 应用程序。只要 application/mobile 应用程序拥有令牌并随请求发送它(在 header 中),应用程序和用户就会通过身份验证。您必须根据数据库 table 检查令牌及其有效性。这是一个complete implementation of the JWT part.