Preface
Mi aplicación móvil permite a los usuarios crear cuentas en mi servicio. Además de poder iniciar sesión con proveedores de autenticación externos, como Facebook, quiero darle al usuario la opción de crear una cuenta con una dirección de correo electrónico.
Normalmente, todas las llamadas a mi servicio web se autentican a través de la autenticación básica a través de HTTPS. Sin embargo, la función de creación de cuenta (también a través de HTTPS) no tiene ninguna autenticación, ya que el usuario todavía no tiene ninguna credencial.
Si estuviera escribiendo un sitio web, usaría Captcha para evitar que mi base de datos se llene con cuentas falsas a través de un script.
Pregunta
¿Cómo puedo verificar que las solicitudes de nuevos usuarios provienen de una instancia de mi aplicación y no de un bot?
Si todos los datos se envían a través de HTTPS, ¿es suficiente para que la aplicación tenga una contraseña almacenada para decir "hey, soy yo!"? ¿Cuáles son las mejores prácticas para hacer algo como esto?
Elaboración
El servidor está escrito en Java usando Spring Framework y Spring Security. Está alojado en App Engine. El costo es una preocupación (tanto de la red como de la computación). La aplicación es un juego móvil. No almaceno información confidencial como números de tarjetas de crédito. Sin embargo, sí hago un seguimiento de las compras de los usuarios en las tiendas de Apple y Android. Mi mayor preocupación es la experiencia del jugador. No quiero que un pirata informático desactive el sistema y arruine el disfrute del juego por parte de alguien. También debo asegurarme de que el jugador se encuentre con la menor cantidad de obstáculos posible al crear una cuenta.
Actualizar/Clarificación
Estoy buscando una manera de asegurar que todas las llamadas al servicio provengan de una instancia de mi aplicación. Las cuentas de usuario ya están protegidas porque el servicio sin estado requiere que envíen sus credenciales en cada solicitud. No hay sesiones ni cookies.
Necesito detener el bot-spam en las llamadas no seguras, como crear una nueva cuenta. No puedo usar captcha porque no encaja en el flujo de la aplicación.