【问题标题】:build a One Time Password authentication server构建一次性密码认证服务器
【发布时间】:2020-03-02 23:35:36
【问题描述】:

问题

在我们的系统中,我们有:

  • 两个应用程序:reactjs 中的后台和 react-native 中的用户应用程序
  • 一个 API(带有 postgres db)
  • Hubspot(用户信息、电话号码等)

我们想添加一个身份验证服务器来保护我们的用户数据并允许用户连接到移动应用程序。该服务器将在 Hubspot(携带用户信息)和 APIdb 中的用户之间提供令牌和链接。 db 将仅存储 hubspot 用户 id 和 api 用户 id 以及一些时间戳。我们想通过短信使用一次性密码。

工作流程类似于:

  • 用户想要连接到应用程序(第一次或不是第一次)。该应用正在请求电话号码。
  • 电话号码被发送到验证服务器,检查它是否存在于 hubspot 中。如果用户电话号码存在但数据库中还没有,这意味着我们需要创建一个新用户(在身份验证服务器数据库和 api 中)。如果用户号存在并且已经在数据库中,则无需执行任何操作。在这两种情况下,都会生成一个令牌并且用户能够连接(仍然需要了解如何做到这一点)。如果 hubspot 中不存在任何内容,则用户将无法在应用中进行身份验证。

问题

我的方向正确吗?创建一个身份验证服务器,是个好主意还是完全没用?我们应该直接在 API 中实现我们的逻辑吗?该系统是关于医疗信息的,数据应该受到保护。

关于 OTP,如果电话号码确实存在,我们应该向用户发送什么?需要实际令牌的身份验证令牌还是随机字符串?

【问题讨论】:

    标签: node.js architecture jwt one-time-password


    【解决方案1】:

    电话号码被发送到验证服务器,检查它是否存在 在中心点。如果用户电话号码存在但在 数据库,这意味着我们需要创建一个新用户(在身份验证服务器中 数据库 AND 在 api 中)。如果用户号存在并且已经在 数据库没有什么可做的。在这两种情况下,都会生成一个令牌 并且用户能够连接(仍然需要了解如何做 那)。如果 hubspot 中不存在任何内容,则用户将无法 在应用中进行身份验证。

    我不认为将电话号码发送到身份验证服务器是一个好主意,而是您生成一个代码并将其保存在某个后端服务器或某个后端数据库中,然后向用户发送相同的确切代码。将代码保存在后端的原因是为了将其与用户在未来某个时间提供的代码进行比较。

    这是一个唯一的识别信息,不是电话号码,人们的电话号码一直在变化。

    用户大概会收到短信,这是我们需要电话号码来发送短信的唯一原因,他们可以将该代码输入回应用程序。

    因此,用户向我们发送了正确的代码,并且该代码会到达后端服务器。然后在服务器上进行比较,如果用户输入了正确的代码,则向他们发送一些进一步的识别令牌,例如识别用户的 JSON Web 令牌以供将来的后续请求。

    这就是认证的意思。一旦用户成功输入令牌,我们会为用户提供一个 JSON Web Token 来专门识别他们并说,嘿,这个用户确实输入了一次性密码,这里是一些关于用户的识别信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-24
      • 2018-06-09
      • 1970-01-01
      • 2013-06-08
      • 1970-01-01
      • 1970-01-01
      • 2017-05-02
      • 2021-12-31
      相关资源
      最近更新 更多