Ha encontrado dos problemas "difíciles": autenticación y autorización. Hay muchísima de información en línea sobre este tema, pero en su caso, creo que su problema se remonta al diseño de la aplicación.
Comencemos con dos preguntas:
- ¿Cómo sabes si el usuario puede publicar un puntaje alto? ( Autorización )
- ¿Cómo sabes que la conexión a tu servidor proviene de un usuario real del juego y no de alguien que se hace pasar por el juego como en tu ejemplo de Java? ( autenticación )
Antes de intentar reinventar la rueda, tenga en cuenta que hay muchas bibliotecas que hacen precisamente eso, con el beneficio adicional de ser madura, probada, funcionando y bien documentada.
Sin conocer los detalles de su aplicación, aquí hay algunas sugerencias:
- Permite a los usuarios jugar en modo 'solo' o en modo 'en línea'. En el modo anterior, el juego es independiente y no necesita realizar ninguna conexión de red (bueno para usuarios conscientes de la privacidad). En este último caso, los usuarios se registrarán en su servidor.
- Una vez que un usuario está registrado (inicio de sesión / contraseña) y usted ha verificado que en realidad es un usuario "real" (contestador de correo electrónico, mensaje de texto, etc.), su servidor puede enviar un "token" para jugar.
- Cuando la aplicación desea enviar su puntuación más alta a su servidor, DEBE autenticarse proporcionando el token de una manera similar a la que describió el usuario @ mike-mackintosh en su respuesta.
- Obviamente, todas las comunicaciones a / desde deben estar cifradas con TLS u otras formas de cifrado fuerte.
- Su aplicación debe validar los certificados para evitar ataques de intermediarios.
El escenario se simplifica: por supuesto, un atacante con suficientes recursos podría registrar una cuenta falsa, aplicar ingeniería inversa a su aplicación, determinar el mensaje a utilizar y enviar datos falsos a su servidor. Para evitarlo, deberá pedir a la plataforma que verifique que la aplicación no haya sido manipulada, lo que a su vez significa extender la cadena de confianza al sistema operativo que ejecuta la aplicación, etc. . Al final, se complica (¿has oído hablar de " informática de confianza " y la gestión de derechos digitales?) Y depende del valor que estamos tratando de proteger
Otra vía de investigación podría ser alguna forma de validación del lado del servidor. Por ejemplo, cada vez que un usuario publica una puntuación superior a X, también debe proporcionar "pruebas" de que desbloqueó un cierto logro, por ejemplo. una cadena aleatoria que se guarda en el perfil del usuario cuando llegan a un punto específico del juego. En este caso, puede verificar el lado del servidor que el usuario realmente pasó los logros anteriores anteriormente.
Puedes mejorar aún más las cosas al generar los tokens de "nivel" al combinar el IMEI del teléfono con una clave aleatoria y usar algún tipo de cifrado de clave pública para que cada usuario esté vinculado a su teléfono. Lo que funcionaría, a menos que alguien estuviera utilizando una ROM personalizada para Android que permita ajustar el IMEI del teléfono, etc.