【问题标题】:Issue JWT after OTP verification in ASP NET Core Web API在 ASP NET Core Web API 中进行 OTP 验证后发出 JWT
【发布时间】:2021-04-17 00:43:03
【问题描述】:

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

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

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

【问题讨论】:

标签: asp.net-core-webapi jwt-auth one-time-password


【解决方案1】:

因此,当用户输入手机号码时,将发送 OTP 并 验证 OTP 后,我想为用户发出 JWT。我现在有 以下关于此的查询:

  1. 如果此流程正确或需要更改某些内容?

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

一般来说,当我们使用JWT认证时,工作流程如下:

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

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

  1. 我应该将发送到用户手机号码的 OTP 存储在哪里?我应该创建一个 用于存储 OTP 和手机号码的单独表,或者应该是 在我使用 ReactJs 的前端站点上进行管理?

对于这个问题,我认为这取决于您如何生成/发送 OTP。

如果OTP是自己生成的,需要将手机号和OTP存入数据库,因为客户端将手机号和OTP发送到服务器端后,需要验证用户是否有效.

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

【讨论】:

  • 您能推荐一些提供程序或软件包来生成 OTP 吗?
  • OtpNet nuget 包支持 TOTP,你可以使用它。
猜你喜欢
  • 2022-06-11
  • 2021-06-27
  • 1970-01-01
  • 2018-06-30
  • 1970-01-01
  • 2023-04-01
  • 1970-01-01
  • 2019-04-14
  • 2019-10-14
相关资源
最近更新 更多