Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
RESTful特定于设备的电话号码身份验证_Rest_Api_Restful Authentication_Api Design - Fatal编程技术网

RESTful特定于设备的电话号码身份验证

RESTful特定于设备的电话号码身份验证,rest,api,restful-authentication,api-design,Rest,Api,Restful Authentication,Api Design,我们有一个API,它向用户的手机号码发送验证码。API是: POST /api/users/verification/start/ { "mobile": "9849735434" } 上述API返回以下响应: { "isVerified": false } 如果响应为“isVerified”:true,我们不会向用户的手机发送验证码。如果为false,则发送代码 目前,所有这些都只适用于手机号码。我们希望使其基于(移动+设备)以使其更安全 为了实现这一点,我们在客户机上存储一个用户

我们有一个API,它向用户的手机号码发送验证码。API是:

POST /api/users/verification/start/
{
  "mobile": "9849735434"
}
上述API返回以下响应:

{
  "isVerified": false
}
如果响应为“isVerified”:true,我们不会向用户的手机发送验证码。如果为false,则发送代码

目前,所有这些都只适用于手机号码。我们希望使其基于(移动+设备)以使其更安全

为了实现这一点,我们在客户机上存储一个用户标识cookie,并计划在此基础上标识设备。应如何修改API以满足这一新要求?几种方法:

  • 创建基于(mobile+cookie)的不同API并发送isverify:true,前提是两者都与数据库中存储的值匹配
  • 修改现有的API以实现这一点-由于并不总是需要对特定于设备的OTP的支持,因此我们必须传递一些标志,使其仅基于移动或(移动和cookie)

  • 我们应该如何设计这样的API来验证基于移动和设备的用户?

    我会修改现有的API以适应新的需求,下面是我在修改时要做的重要事情

  • 每当您创建任何API时,总是以这种方式从客户机传递一个“版本”,您将知道要执行代码的哪个部分。 e、 g假设您的移动用户有两个不同版本的应用程序,一次在此版本之前,另一次之后。让两个用户都运行版本控制是很有帮助的

  • 从客户端传递“设备类型”以检查客户端是否为移动/标签或其他,这将具有多个优势首先,您将知道手机/网络中有多少用户群,另一个优势是您可以相应地自定义输出大小,因为与移动应用程序相比,网络将拥有更多信息


  • 既然您有了设备和版本信息,您只需在现有API中编写条件。一旦您觉得没有旧版本的使用,我们可以停用API的这一部分。

    希望这对您有所帮助,您可以修改代码并遵循一些客户端和服务器步骤

    客户端

    第1步。

    • 从用户处获取手机号码和国家/地区
    • 从用户设备获取UUID。(UUID:)
    • 用这个参数点击自己的Api
    服务器端

    第2步。

    • 获取并验证它,这个手机号码是否有效(我们也可以从客户端执行)
    第3步。

    • 生成0001-9999或更高之间的OTP
    • 发送OTP api调用以根据OTP服务提供商的api发送手机号码
    • 将OTP编号与手机编号和UUID一起保存到数据库中
    客户端

    第4步。

    • 获取手机号码、OTP和hit api
    • 检查来自DB的OTP同一OTP,然后响应成功,否则您可以发送错误的OTP消息

      • 有不同的选择

      • 当您想要使用cookie时,为什么需要一个单独的API?如果客户端有cookie,则让客户端将此cookie作为cookie发送。您的服务可以在需要时分析cookie并决定进一步的步骤

      • 如果您无法发送Cookie,并且您不能选择第一种方法: 设备不应该知道,从您的服务的角度来看,它是什么类型的。这就是为什么我建议使用两种服务——一种不带cookies,另一种带cookies

      • 你说“安静”。在当前表单中,您的服务不是RESTful的

      • A) 使用动词使服务不是RESTful的。例如,将其重命名为

        "POST /api/users/verification/"
        
        B) 在一个操作中混合了两个操作:检查客户端是否经过身份验证,以及启动身份验证过程。将其分为两部分: 要检查客户端是否经过身份验证,请执行以下操作:

        "GET /api/users/verification/mobile/9849735434"
        
        要启动身份验证,请执行以下操作:

        "POST /api/users/verification/mobile/9849735434"
        

        在这种情况下,对于帖子,您不需要正文。

        似乎选项2最有意义,API行为将根据cookie的存在而改变。但我需要相同的API来根据客户的要求实现两者,即进行设备特定验证或仅进行基于数字的验证。我应该传递查询字符串来修改服务器端的这种行为吗?cookie的存在不足以决定用户应该进行设备验证吗?如果不是,并且它是一个可选参数,那么您可以有明确的URL,但仍然使用相同的API,例如
        /API/users/verification/start/:mode
        so
        ../start/mobile
        ../start/device
        (如果有意义的话)。API可以从URL中提取模式,并决定如何处理验证。我们不会强制更新我们的应用程序,因此无法杀死旧版本API。然后,无需杀死旧版本,可以根据客户端的版本调用API