Estoy trabajando en un juego móvil siempre en línea (aplicación nativa de Android / iOS con Unity) y me gustaría poder autenticar el reproductor sin requerir ningún nombre de usuario / contraseña al principio. Para aquellos que lo saben, trato de lograr un esquema de autenticación similar a los famosos juegos Supercell (Choque de clanes, Boom Beach, etc.) Lo que tengo en mente:
-
La primera vez que el usuario inicia el juego, se realiza una solicitud al servidor para una nueva cuenta, el servidor envía un UUID.
-
Este UUID se almacena en el dispositivo (¿debo cifrarlo o hacer un hash?).
-
Cuando el usuario inicia el juego, lo autentico con un token (
UUID+timestamp+hmac(sha256, username+timestamp, K)
). ¿Es mejor generar un token de sesión temporal (almacenado en la base de datos) o puedo usar el token anterior para todas las solicitudes después de la autenticación? - Para cada solicitud, envío
token+params+timestamp+hmac(sha256, token+params+timestamp, K)
Y todas las comunicaciones serán por SSL.
¿Es totalmente inseguro?
NB: En el juego podrás realizar compras dentro de la aplicación y, en este caso, la primera vez que intentes comprar algo, tendrás que vincular tu juego con tu GameCenter o Google Play o cuentas de Facebook. Esta información será almacenada en la base de datos. ¿Debo usar estas cuentas para autenticarme si es posible?
Como puede ver, no hay nada claro en mi cabeza y definitivamente no soy un experto en seguridad. Así que todos los pequeños consejos serán apreciados.