Sia S un server e C un client mobile (app iOS / Android). Supponiamo che la comunicazione tra S e C sia cifrata con SSL (o qualsiasi altro protocollo standard).
Il sistema è un'applicazione votante, cioè S invia alcuni articoli a C e C può upvotare / downvotare loro, inviando il suo voto a S. La cosa è che non voglio che C si registri / iscriva per questo, ma anche io non voglio che voti più di una volta.
Si potrebbe pensare a qualcosa di simile: quando l'app viene lanciata per la prima volta su C, S assegna un UUID a C e C lo memorizza. Quindi ogni volta che C vuole votare invia il voto e il suo UUID e S controlla se quell'UUID ha già votato.
Ma in tal caso, cosa impedisce a qualcuno di creare un programma che chiede sempre S per UUID e quindi vota lo stesso articolo quante volte desidera?
Tutto ciò che mi viene in mente è che S e C condividono una password che è hardcoded e quindi il sistema funzionerà in questo modo:
- C chiede S per un UUID,
- S invia C a UUID,
- C memorizza l'UUID,
- Quando C vuole votare, invia a S: {vote, crypt (UUID, sharedPwd)}
Ovviamente nel momento in cui qualcuno ha saputo che la password (e forse è facile ottenerla come è in realtà nel codice del client ...) il sistema sarebbe messo a repentaglio ...
Quindi ... Come può il mio server sapere che le richieste provengono effettivamente dall'App? O potrebbe essere un approccio diverso: in che modo alcune app senza registrazione eseguono l'autenticazione?