如何在 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.
我正在 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.