使用移动应用程序进行API身份验证(通过短信)
我们目前的任务是使用RESTful API为移动应用程序通信实现(最好是简单的)身份验证系统。后端具有特定于用户的数据,由用户的电话号码标识。我正试图更多地了解安全性的一般情况、不同的方法以及它们为何以这种方式工作 我想到了一个简单的身份验证系统:使用移动应用程序进行API身份验证(通过短信),api,security,mobile,architecture,Api,Security,Mobile,Architecture,我们目前的任务是使用RESTful API为移动应用程序通信实现(最好是简单的)身份验证系统。后端具有特定于用户的数据,由用户的电话号码标识。我正试图更多地了解安全性的一般情况、不同的方法以及它们为何以这种方式工作 我想到了一个简单的身份验证系统: 客户端向api发送一个验证请求,其中包括他们的电话号码和生成的guid 服务器向电话号码发送带有验证码的SMS消息 客户端通过发送其唯一的guid、电话号码和验证码来验证其设备 服务器使用某种访问令牌进行响应,客户端可以使用该令牌进行进一步请求
- 客户端向api发送一个验证请求,其中包括他们的电话号码和生成的guid
- 服务器向电话号码发送带有验证码的SMS消息
- 客户端通过发送其唯一的guid、电话号码和验证码来验证其设备
- 服务器使用某种访问令牌进行响应,客户端可以使用该令牌进行进一步请求
我认为这种方法很简单,但在某些地方有一个巨大的缺陷:)你能给我一些启发吗?你提到的方法很好用。客户端将启动一个带有电话号码和随机id的请求,服务器将向设备返回一个验证令牌。该令牌只能在设定的到期日内一次性使用。然后,客户机将发送电话号码、之前使用的随机令牌和服务器验证的验证令牌。如果有效,服务器将发送一个会话令牌(或身份验证令牌)或类似的可用于身份验证的令牌。会话令牌可以从服务器设置超时。
你没有提到它是否是一个网络应用。如果是web应用程序,则可以从服务器设置仅限https的会话cookie。否则,您可以将其本地存储在应用程序的本地存储中。通常情况下,应用程序无法读取属于其他应用程序的私有数据。
所有通信必须使用HTTPS进行。否则,整个方案可能会通过嗅探流量而受损,因为最终您使用的是身份验证令牌。存在一个缺陷。该系统容易受到暴力攻击 假设我是个攻击者。我将为自己生成一个guid,并将其与任意电话号码一起发送 接下来,我将对可能的短信代码进行暴力破解——如果是6位数字,则只有10^6个组合。暴力只需几秒钟,然后我就可以访问拥有这部手机的人的数据 此外,正如菲卢在评论中指出的那样,你可以强迫你发送任意数量的短信,有效地让你免费承受经济损失 此攻击也没有有效的防御:
您可能对阅读oauth2.0感兴趣-这是身份验证的当前趋势。基本上,客户端打开一个由服务提供商维护的网页,供用户登录他/她的帐户,客户端被重定向到一个页面,在该页面上接收访问代码(短时间可用),然后将该代码交换为一对访问令牌和刷新令牌。访问令牌用于访问用户的帐户,刷新令牌用于刷新访问令牌。我读过oauth,但我认为它不适合我们。我们不允许通过第三方身份验证系统登录,所以这似乎有些过分。用户没有用户名和密码,我们只需要验证他们是否有权访问输入的电话号码(因此验证短信)。他们可以访问的数据也与电话号码有关。我的观点是,您描述了一个类似于oauth2.0的身份验证系统。也许oauth的优点和缺点(访问令牌、安全性等)对您的系统是有效的您的系统听起来很像谷歌的双因素身份验证。主要的区别在于你没有说你如何知道手机是适合这个人的。在谷歌的设置中,用户必须使用他们的用户/通行证来放入手机,然后将其关联。我要强调的主要弱点是你自己提出的,即代币在一定时间内是有效的,这是你可以控制的。因此,您可能需要某种撤销API来帮助处理丢失手机的情况。1。是的,但即使在你的例子中,给定一个很小的N,N/10^6也接近于零,尽管公认不是零。因此,问题是验证码是否是手动输入的,即它有多复杂?2.您没有提到发送数量不受控制的短信会造成经济损失,因此您可能需要采取应对措施。如果用户,即GUID/电话,注册是安全的,我认为它将工作,其他明智的(甚至更多的s)