Prefazione
La mia app mobile consente agli utenti di creare account sul mio servizio. Oltre ad essere in grado di accedere con provider di autenticazione esterni, come Facebook, voglio dare all'utente la possibilità di creare un account usando un indirizzo e-mail.
Normalmente, tutte le chiamate al mio servizio web sono autenticate tramite l'autenticazione di base su HTTPS. Tuttavia, la funzione di creazione dell'account (anche su HTTPS) non ha alcuna autenticazione, poiché l'utente non ha ancora credenziali.
Se stavo scrivendo un sito Web, userei Captcha per impedire che il mio database venga riempito di account fasulli tramite script.
Domanda
Come posso verificare che le nuove richieste utente provengano da un'istanza della mia applicazione e non da un bot?
Se tutti i dati vengono inviati su HTTPS, è sufficiente che l'applicazione abbia una password memorizzata per dire "hey, sono io!"? Quali sono le migliori pratiche per fare qualcosa del genere?
Elaborazione
Il server è scritto in Java usando Spring Framework e Spring Security. È ospitato su App Engine. Il costo è una preoccupazione (sia di rete che di calcolo). L'app è un gioco mobile. Non memorizzo informazioni sensibili come i numeri delle carte di credito. Tuttavia, tengo traccia degli acquisti degli utenti negli store Apple e Android. La mia più grande preoccupazione è l'esperienza del giocatore. Non voglio che un hacker abbassi il sistema e rovini il divertimento di qualcuno nel gioco. Inoltre, devo assicurarmi che il giocatore affronti il minor numero di ostacoli possibile durante la creazione di un account.
Aggiornamento / Chiarimento
Sto cercando un modo per garantire che tutte le chiamate al servizio provengano da un'istanza della mia applicazione. Gli account utente sono già protetti perché il servizio stateless richiede di inviare le proprie credenziali ad ogni richiesta. Non ci sono sessioni e nessun cookie.
Devo interrompere bot-spam sulle chiamate non protette, come creare un nuovo account. Non posso usare captcha perché non si adatta al flusso dell'applicazione.