Sea S un servidor y C un cliente móvil (aplicación iOS / Android). Supongamos que la comunicación entre S y C está cifrada con SSL (o cualquier otro protocolo estándar).
El sistema es una aplicación de votación, es decir, S envía algunos artículos a C, y C puede subir / votar y enviar su voto a S. Lo que pasa es que no quiero que C se registre / se inscriba para esto. pero tampoco quiero que vote más de una vez.
Uno podría pensar en algo como: cuando la aplicación se inicia por primera vez en C, S asigna un UUID a C y C lo almacena. Luego, cada vez que C quiere votar, envía el voto y su UUID y S comprueban si ese UUID ya ha votado.
Pero en ese caso, ¿qué impide a alguien crear un programa que siempre está pidiendo S para UUID y luego votar el mismo artículo tantas veces como se desee?
Todo lo que me viene a la mente es que S y C comparten una contraseña que está codificada y el sistema funcionará de esta manera:
- C pide a S por un UUID,
- S envía C a UUID,
- C almacena el UUID,
- Cuando C quiere votar, envía a S: {vote, crypt (UUID, sharedPwd)}
Por supuesto, en el momento en que alguien supiera esa contraseña (y tal vez sea fácil de obtener ya que en realidad está en el código del cliente ...) el sistema estaría en peligro ...
Entonces ... ¿Cómo puede mi servidor saber que las solicitudes provienen de la aplicación? O puede ser un enfoque diferente: ¿cómo realizan la autenticación algunas aplicaciones sin registro?