微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

OTP SMS (MFA/2FA) 的廉价替代品

如何解决OTP SMS (MFA/2FA) 的廉价替代品

在我的 Android 应用程序中,我需要将用户的联系人链接到我们的数据库用户帐户,以便用户可以单击特定联系人,应用程序会将其转换为我们的内部用户 ID(如果存在),从而使沟通更容易和更友好。

我想过使用 SMS OTP 来验证电话号码(电话号码 -> 内部用户 ID),但结果证明它非常昂贵(估计每个月有 150k-300k 新用户)。我们的用户遍布全球。费用为每月 15,000 美元至 40,000 美元。不是我们买得起的。

也在考虑从以下位置获取用户的电话号码:

  • Google People API - 需要特殊权限,并且只提供未经验证的“关于我”电话号码。
  • Google Account API - 无法获取电话号码
  • Google 登录 SSO - 无法获取电话号码
  • Facebook 登录 SSO - 无法获取电话号码(已弃用)
  • WhatsApp 的 AccountKit(通过 WhatsApp 的 OTP)- 已弃用
  • WhatsApp API - 非常昂贵,在某些情况下与 SMS 相似,甚至更多
  • 从 SIM 卡中提取 - 不可靠,大多数情况下不起作用,未经验证,可以伪造

是否有比短信 OTP 更便宜的替代方法获取经过验证的电话号码?

谢谢!

解决方法

您可以使用一种廉价的 hack(免费)方法,但它可以被用户伪造,前提是用户可以控制输入的电话号码。

因此,只有当您对在某些情况下怀有恶意的高级用户感到满意时才应该使用它。

这里的想法是 SMS 发送的成本将转移到用户而不是您的服务器上。如今,在大多数国家/地区,一条 SMS 都是免费的,或者在其中一些国家/地区非常便宜,因此您应该提供“可能会收取运营商费用”等免责声明。

您需要根据 tutorial 实施 SMS Retriever API 流程,但是当它说要从您的服务器发送 SMS 时,您应该让用户从他们自己的设备发送该 SMS:

Intent intent = new Intent( Intent.ACTION_VIEW,Uri.parse( "sms:" + inputNumber)); 
                    intent.putExtra( "sms_body",otpContents); 
                    startActivity(intent);

或者,如果您的应用有权发送短信,则使用 SmsManager

短信检索器流程的其余部分应按照教程中的说明进行,允许您的应用验证用户输入的号码是否由用户发送和接收。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?