Authentication 实现电话认证

Authentication 实现电话认证,authentication,oauth-2.0,mobile-application,best-fit,Authentication,Oauth 2.0,Mobile Application,Best Fit,我正在尝试在我的asp.net核心后端API中实现电话身份验证,比如whatsapp。 流程是: 用户打开移动应用程序 如果他不是当前用户,他可以写下他的电话号码 后端应向其手机发送验证码 并将verificationObject存储到inMemroyCache,过期时间为1分钟,并向应用程序发送验证id 用户输入代码,然后移动应用程序通过https将带有verificationId的代码发送到后端 后端检查缓存中存储的代码和验证ID 如果为true,后端将使用临时令牌向移动应用程序发送带有状态

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

  • 用户打开移动应用程序
  • 如果他不是当前用户,他可以写下他的电话号码
  • 后端应向其手机发送验证码 并将verificationObject存储到inMemroyCache,过期时间为1分钟,并向应用程序发送验证id
  • 用户输入代码,然后移动应用程序通过https将带有verificationId的代码发送到后端
  • 后端检查缓存中存储的代码和验证ID
  • 如果为true,后端将使用临时令牌向移动应用程序发送带有状态和操作(登录或注册新帐户)的验证Id(不可猜测),临时令牌存储在MemoryCache中,超时
  • 现在,移动应用程序将根据上一步中的操作参数与signin api/register api进行对话。并将不带密码的临时访问令牌发送到应用程序以验证用户
  • 我已经将代码验证Api与基于Api最佳实践的其他逻辑分开,因为每个Api负责做一件事

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


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

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

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

    用户可能会收到文本消息,向我们发送正确的代码,并将其发送到我们的后端服务器,我们比较这两个代码,如果用户输入了正确的代码,我们将向他们发送一些进一步的标识令牌,例如Json Web令牌,以标识用户以备将来的请求

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

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

    我主要使用Json Web令牌和Cookie,我不是ASP.NET开发人员

    一次性密码技术一直是IMO的一个雄心勃勃的项目

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

    因此,Firebase使用OTP的方式是,您可以将代码存储在Firebase中。然而,挑战实际上是向用户发送一个代码。这是一条真实的短信。要解决这个问题,您不能单独使用Firebase,您可以集成非常流行的Twilio。Twilio是通过手机短信与用户进行交互的,因此我们可以利用Twilio向用户发送代码

    另一部分是生成Json Web令牌,同样,我不是ASP.NET开发人员,但它确实支持Json Web令牌,正如我在这里所看到的:

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

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

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

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

    那么,您是否编写了用于代码比较的服务器?我们不希望在用户的设备上进行此比较

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

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

    再说一次,我不是ASP.NET开发人员,也许您可以使用Node、Express、Python或Rails,但也许您可以找到一种低压力、低摩擦的方式

    好吧,我就是这么看的:

    ASP.NET-向用户显示一个表单,以便通过OTP进行注册和登录

    Twilio-向用户发送文本消息

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

    谷歌云功能-天哪,这是从哪里来的

    你可以在这里阅读:

    所以谷歌云函数是在谷歌服务器上按需运行一次的代码片段。GCF具有紧密的互操作性,并与Firebase数据存储集成

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

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


    我刚才提到的流程非常复杂,希望能有所帮助。

    好吧,你的说法与我的流程相同,但有两个主要区别。使用云并将otp存储在数据库中,而不是缓存它,这样用户可以在一两天后进行身份验证,这与要求相反。@M.NourBerro,啊好的,如果要求不允许用户返回应用程序,那么我的解决方案可能无法工作,但是我想知道这个要求是否是为了通过强制用户