在IT技术中,SMS注册类似于移动应用程序:WhatsApp

20
我想知道这些短信注册机制是如何工作的。我在互联网上搜索了一下,但问题是有很多想要出售在线短信服务的短信提供商,所以我找不到任何信息...
问题: 这是如何工作的:设置你的手机号码,然后发送一个带有otp的短信给你。将此密码输入应用程序中。
背后的原理是什么?他们是否有短信网关或类似的东西?它的成本是多少?
谢谢
4个回答

16

这是一个基于Nexmo构建的简单的电话号码验证服务(免责声明,我为Nexmo做了一些开发者宣传)。我认为它基本上就是你要找的东西,其目标是验证号码是否确实属于用户(也可以用于二次因素身份验证)。

移动应用程序的基本集成(特别是针对此示例代码,但通常流程):

  • 发送要验证的电话号码,接收唯一哈希值。
  • 验证系统向用户发送一个唯一的代码。
  • 用户将该代码传递给您的应用程序后,将原始哈希和代码发送到验证系统进行验证。

您可以放弃托管部分,只需在应用程序内执行这些步骤(生成代码,通过SMS API发送,检查用户输入的代码)。然而,在那点上有几件事情需要考虑:

  • SMS API的凭据被编译到您的分布式应用程序中。这是您想冒险的事情吗?
  • 代码通过网络从设备发送;虽然SSL会阻止对代码的随意观察,但想要伪造注册的人可能更有可能从HTTP请求中捕获代码。

将验证系统放在移动应用程序之外可以解决这两个问题。


客户端通常是直接与验证系统(例如:Nexmo)通信还是通过另一台服务器进行通信? - lysergic-acid
1
@lysergic-acid 像我在答案中提到的那样,客户端可以直接向Nexmo发出API请求,但最好使用一个中间服务器。 - Tim Lytle
1
@crazyhorse 没错。在大多数情况下,您已经有某种形式的用户身份验证(他们提供了用户名/密码、oath令牌等)。号码验证步骤仅验证用户实际控制特定电话号码。 - Tim Lytle
但是我也需要一个短信网关吗? - Johnny2012
在这个例子中,Nexmo是网关。Nexmo还有一个新的验证API(基本上使该示例成为API的一部分):https://www.nexmo.com/verify/ - Tim Lytle
显示剩余3条评论

10

我知道这篇文章太老了,但这是给未来会访问此页面的人看的:

用户“Harsh Shah”所说的是错误的..

你不应该在设备上生成随机数!这会破坏整个验证。

  1. 你要求用户输入电话号码,将其发送到服务器。
  2. 作为该请求的响应,你需要生成一个随机数并将其保存在用户记录的数据库中,同时发送带有该随机数的短信。请求的响应应该是SENT-OK而不是NOT-SENT。
  3. 设备接收到短信后,将其发送回服务器与现有的数据库记录进行比较。

数据交换:

  1. 电话发送('012345567')->服务器响应('SENT-OK'); 在后台: 服务器:[生成数字,将其发送到SMS中,保存在编号为01234567的用户记录的数据库中,例如:123123]

[手机读取短信,例如'123123']

  1. 电话发送('01234567','123123')->服务器响应('AUTH-OK');

在后台: 服务器:[检查记录用户01234567的数据库,将步骤1生成的随机数与用户发送的数字进行比较]。

如果你在用户手机上生成该数字,那么任何脚本小子都可以通过从内存/存储中提取该数字(非常容易)并模拟包含该数字的短信(同样容易)来攻击你的身份验证... 你可能认为这是一个罕见的情况,但这是安全上的一个重大漏洞,如果像“Harsh Shah”所说那样做,你可以将自己验证为任何现有用户并窃取他们的数据...


我同意你的观点,从安全角度考虑,在服务器上生成随机数更好。 - androidFan

4
基本原则如下:
  1. 在设备上的应用中生成随机代码。要求用户提供手机号码。
  2. 将此代码和手机号码发送到运行在服务器上的应用程序中。
  3. 调用短信网关API,将代码作为消息发送到指定的手机号码。
有许多短信网关提供商,您可以在谷歌上搜索。其中大部分还提供了使用各种编程语言的API教程。成本通常基于每条信息计算,并且通常以购买一定数量短信包的形式出售。

1
感谢。另外,如果以后有人阅读这篇文章:nexmo.com是一个非常好的供应商。 - eav

2
本文介绍如何将短信验证集成到您的安卓应用程序中,就像 WhatsApp 一样。 Android 添加短信验证类似于 WhatsApp - 第1部分 Android 添加短信验证类似于 WhatsApp - 第2部分

enter image description here

基本上,验证手机号码涉及以下步骤:
  1. 首先,用户的手机号码将发送到我们的服务器,新用户行将被创建。

  2. 我们的服务器向短信网关请求向该手机号码发送带有验证码的短信。

  3. 短信网关向用户设备发送带有验证码的短信。

  4. 验证码将再次发送回我们的服务器进行验证。我们的服务器对其进行验证并激活用户。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接