-1

我正在尝试在我的 asp.net 核心后端 API 中实现电话身份验证,例如 whatsapp。流程是:

  1. 用户打开移动应用
  2. 如果他不是当前用户,他可以写下他的电话号码
  3. 后端应该将验证码发送到他的手机,并将验证对象存储到inMemroyCache中,过期时间为 1 分钟,并将验证 ID 发送到应用程序。
  4. 用户输入代码,然后移动应用通过 https 将带有验证ID 的代码发送到后端
  5. 后端检查缓存中存储的代码和验证ID。
  6. 如果真正的后端将带有状态操作(登录或注册新帐户)的验证 ID(不可猜测)发送到带有临时令牌的移动应用程序,该临时令牌存储在内存缓存中并超时。
  7. 现在移动应用程序将根据上一步中的操作参数与登录 api / 注册 api 对话。并将没有密码的临时访问令牌发送到应用程序以对用户进行身份验证

我根据 API 最佳实践将代码验证 API 与其他逻辑分开,因为每个 API 负责做一件事。

我的问题是其他应用程序遵循这种做法还是有一些其他做法?将临时令牌存储在缓存中而不是将它们存储在数据库中是否正确。

Firebase 如何处理电话身份验证?

4

1 回答 1

2

如果通过电话身份验证,您的意思是一次性密码,我建议的解决方案是用户请求 OTP,我们向他们发送他们请求的确认。

然后,生成代码并将其保存在某个后端数据库中。接下来,向用户发送相同的确切代码。我们将代码保存到后端数据库,以便我们可以将其与用户发送给我们的内容进行比较。

用户大概会收到短信,向我们发送正确的代码,然后它会到达我们的后端服务器,我们比较两个代码,如果用户输入了正确的代码,我们将向他们发送一些进一步的识别令牌,例如 Json Web 令牌为将来的请求识别用户。

通过将令牌放置在我们的后端服务器上,它使用户更加友好,并为我们节省了几个步骤,而不必缓存任何具有setTimeout或过期的内容。

因此,如果用户关闭应用程序并且直到一两天后才返回它,他们仍然可以进行身份​​验证,我们不必担心缓存中的令牌。

我主要使用 Json Web Token 和 cookie,而且我不是 ASP.NET 开发人员,要明确一点。

一次性密码技术始终是一项雄心勃勃的 IMO 项目。

所以我们需要保留用户应该输入到设备中的代码,以便我们可以在将来的某个时候进行比较。当您生成代码时,将其保存到 Firebase,以便将来某个时候您可以联系 Firebase 并说电话号码为 212-555-1212 的用户刚刚向您发送了代码 1234,这是正确的代码吗?

因此,Firebase 使用 OTP 的方式是您可以将代码存储在 Firebase 中。但挑战实际上是向用户发送代码。这是一条实际的 SMS 消息。为了解决这个问题,您不能单独使用 Firebase,您可以集成非常流行的 Twilio。Twilio 就是通过电话 SMS 消息与用户进行交互,因此我们可以利用 Twilio 向用户发送代码。

另一部分是生成 Json Web 令牌,同样我不是 ASP.NET 开发人员,但它确实支持 JSON Web 令牌,从我在这里看到的内容来看: JWT authentication for ASP.NET Web API

您还可以在 Firebase 中处理身份验证或用户系统。一旦用户输入 OTP,我们就会通过 Firebase 生成 JSON Web Token。

因此,所有 JSON 存储和所有反映用户身份的信息都可以保存在 Firebase 上。

最后一件事,我确实说过我们需要比较服务器上的代码。嗯,什么服务器?

Firebase 只是一个数据存储,它是一个存储 JSON 数据的地方,它不给我们运行自定义代码的能力。

那么你写一个服务器来比较代码吗?我们不想在用户的设备上进行这种比较。

那么我们该怎么办?另外,我们如何生成代码?也不要为此使用用户的设备。

那么我们在哪里生成代码呢?我们知道使用 Firebase 数据存储来存储代码,但是我们如何生成它呢?

同样,我不是 ASP.NET 开发人员,也许你可以使用 Node 或 Express 或 Python 或 Rails,但也许你可以找到一种低压力低摩擦的方式。

好吧,这就是我的看法:

ASP.NET - 向用户显示通过 OTP 注册和登录的表单

Twilio - 向用户发送短信

Firebase - 存储用户数据,包括用户帐户和正确的 OTP 代码

Google Cloud Functions -圣牛,这是从哪里来的?

您可以在这里阅读: https ://medium.com/google-cloud/running-net-on-google-cloud-functions-977e1a1c489

因此,Google Cloud Functions 是在 Google 服务器上按需运行一次的代码片段。GCF 与 Firebase 数据存储具有紧密的互操作性和集成性。

我们可以为 Firebase 内部的数据添加一些逻辑或处理。GCF 将允许您使用一些自定义逻辑来生成代码并将它们保存到 Firebase,并且 GCF 还可以在用户发送代码后比较代码。

AWS Lambda 和 GCF 在功能上几乎相同,因此这也是一种选择。不管你使用什么解决方案,它们都是可以转移的技能。

我刚刚提供了很多复杂性,希望对您有所帮助。

于 2019-03-24T09:58:54.100 回答