在 ASP NET Core Web API 中验证 OTP 后发布 JWT

Issue JWT after OTP verification in ASP NET Core Web API

我在我的 Web API 项目中使用 .NET Core 3.1。在那方面,我使用了 JWT 身份验证。现在我想允许用户使用他们的手机号码登录或注册。因此,当用户输入手机号码时,将发送一个 OTP,并在验证 OTP 后,我想为用户发布 JWT。现在,我对此有以下疑问:

  1. 如果此流程正确或需要更改某些内容?
  2. 我应该将发送到用户手机号码的 OTP 存储在哪里?我应该创建一个单独的 table 来存储 OTP 和手机号码,还是应该在我使用 ReactJs 的前端站点上进行管理?

注意:我无法将身份验证机制从 JWT 更改为任何其他机制,因为我已经依赖它。

So when the user enters the mobile number an OTP will be sent and after verifying the OTP, I want to issue JWT for the user. Now, I have the below queries regarding this:

  1. If this flow is correct or something needs to be changed?

首先,我认为工作流程是正确的。

一般我们在使用JWT认证时,流程如下:

  1. 客户端向服务器发送请求(包含用户信息,如:用户名和密码)获取令牌
  2. 服务器接收用户信息并检查授权。如果验证成功,服务器会生成一个 JWT 令牌。
  3. 客户端收到令牌并将其存储在本地某处。
  4. 客户端在以后的请求中发送令牌。
  5. 服务器从请求 header 获取令牌,使用 a) Header 从令牌 b) 从令牌 c) 服务器已有的密钥再次计算哈希。
  6. If ("newly computed hash" = "hash came in token"), token 有效否则被篡改或无效

因此,在您的工作流程中,您使用手机号码和 OTP 登录并验证用户。也是对的。

  1. Where should I store the OTP sent to the user's mobile number? Should I create a separate table for storing OTP and mobile numbers or it should be managed on the front-end site where I am using ReactJs?

对于这个问题,我认为这取决于你如何generate/send OTP。

如果OTP是自己生成的,你必须把phone号码和OTP存入数据库,因为client把phone号码和OTP发给server端后,你必须验证用户是否有效。

如果您使用某些提供程序或包来生成 OTP,可能是 OTP 已过期 属性,您也可以将它们存储在数据库中。如果过期时间很短,没有必要存入数据库,可以尝试用session存OTP。