Tengo un servicio REST que está razonablemente completo y se usará con una aplicación iOS. Está construido con Ruby/Sinatra, pero no creo que realmente importe aquí.¿Cómo proteger la parte 'pública' de un servicio REST del correo no deseado?
Estoy utilizando Autenticación HTTP básica sobre SSL para varios puntos finales y esa parte funciona muy bien.
La pregunta es: ¿Cómo evito que los spammers, etc. llamen a partes del servicio REST que no están protegidas a través de la Autenticación básica HTTP?
Ejemplo: Registro de Usuario
Vamos a suponer que la llamada resto es (POST).../register_account pasando un objeto JSON en el cuerpo.
Por razones obvias, esta llamada no puede esperar un nombre de usuario/contraseña vinculado a una cuenta de usuario.
ideas son:
1) La aplicación tiene su propio 'nombre de usuario'/contraseña y algunas llamadas comprobaría para app-credenciales. Problema: Rootear el dispositivo, etc. podría desenterrar esas credenciales.
2) La aplicación pasa un token secreto a través de un encabezado HTTP al servicio REST para esas llamadas. Problema: Igual que (1)
¿Hay alguna técnica comúnmente utilizada para evitar tales llamadas no deseadas? Estoy pensando en introducir la identificación del dispositivo del iPhone en la mezcla, pero aún no he identificado un enfoque definitivo.
Gracias
Usaré esta joya: https://github.com/datagraph/rack-throttle para limitar la velocidad. Voy a crear una subclase para que el identificador del cliente sea un combo de id. De dispositivo + dirección IP. También se aferrará a la idea de credenciales de la aplicación. – Riaz