前言
我的移动应用程序允许用户在我的服务上创建帐户。除了能够使用外部身份验证提供商(如 Facebook)登录之外,我还想为用户提供使用电子邮件地址创建帐户的选项。
通常,对我的 Web 服务的所有调用都通过基于 HTTPS 的基本身份验证进行身份验证。但是,创建帐户功能(也通过 HTTPS)没有任何身份验证 - 因为用户还没有任何凭据。
如果我正在编写一个网站,我会使用 Captcha 来阻止我的数据库通过脚本填充虚假帐户。
问题
如何验证新用户请求来自我的应用程序实例而不是机器人?
如果所有数据都通过 HTTPS 发送,那么应用程序存储的密码是否足以说“嘿,是我!”?做这样的事情的最佳实践是什么?
细化
服务器是使用 Spring Framework 和 Spring Security 用 Java 编写的。它托管在 App Engine 上。成本是一个问题(网络和计算)。该应用程序是一款手机游戏。我不存储信用卡号码等敏感信息。但是,我确实会跟踪用户在 Apple 和 Android 商店的购买情况。我最关心的是玩家体验。我不希望黑客破坏系统并破坏某人对游戏的享受。我还需要确保玩家在创建帐户时面临尽可能少的障碍。
更新/澄清
我正在寻找一种方法来确保对服务的所有调用都来自我的应用程序实例。用户帐户已经受到保护,因为无状态服务要求他们在每次请求时都发送凭据。没有会话,也没有 cookie。
我需要在不安全的呼叫(例如创建新帐户)上停止垃圾邮件。我不能使用验证码,因为它不适合应用程序的流程。