假设我有一个 iOS/Android 应用程序,它依赖于自定义 REST API 来处理诸如帐户管理(注册、登录、密码重置、获取/设置用户相关数据)之类的事情。
没有好的方法可以保证我的 API 只从我的移动应用程序中调用。Oauth2 等在客户端代码中带有“秘密”的代码可以很容易地进行逆向工程。
假设我有一个这样的 API 调用:https :
//myapi.example.com/register_user?username=UUU&password=PPP&email=EEE
这会创建一个新用户,从那时起,所有 API 调用都将包含会话令牌或将 API 调用与具有帐户的特定应用程序用户联系起来的东西。
第一次注册调用是唯一一个不受任何保护的调用,我担心的是恶意人员从 PC 脚本调用它 1,000,000 次以创建大量虚假用户,尤其是使用真实电子邮件地址的用户。那么拥有这些地址的人将无法使用该应用程序。
如何保护第一个 API 调用以防止大规模滥用?我正在考虑在用户注册表单中包含一个经过服务器验证的移动友好验证码。
同样,所有后续 API 调用都受到会话令牌的保护,并且每个用户监控的 API 调用计数(可疑的调用被阻止)。
它是关于以这样一种方式设计 API,即使从像手机这样的固有不安全客户端使用,它仍然没问题。基本上,即使 API 完全公开,也没有人能做错什么。所以这里的问题集中在保护第一个 API 调用,但它也是关于解决更普遍的问题。
似乎其他有趣的选择包括使用电子邮件验证或可靠的第三方身份提供商,如谷歌等。这三个选项都不是完美的。无论如何,有兴趣围绕这个问题进行讨论。
那有意义吗?我是不是把事情复杂化了?