Me gustaría que las API de mi servidor solo acepten solicitudes de mi propia aplicación, para evitar que otros clientes "maliciosos" de mi servicio.
Según tengo entendido, la forma de hacerlo sería con un "certificado de cliente" que la aplicación envía y que el servidor web está configurado para verificar.
Sin embargo, estoy hospedando mi aplicación en Heroku, y creo que no es posible hacerlo, así que estoy buscando algo lo mejor que me permita lograrlo.
Pensé que tal vez podría tener un par de claves, donde el cliente usa una clave privada para firmar un determinado token acordado (más algo de sal aleatoria, de modo que la cadena cifrada sea siempre diferente), y el servidor usa la clave pública para verificar el token (y rechaza las sales duplicadas para evitar la reproducción). O tal vez el cliente firme la solicitud completa con su clave privada, o algo así.
La idea sería que incluso si alguien se las arregla para sortear nuestro PIN SSL (potencialmente con un interruptor de apagado de iOS, e potencialmente) e inspeccionar nuestro tráfico y descubrir cómo funciona nuestra API, todavía no pueden llamarnos a menos que inviertan diseñar el binario para extraer ese certificado / clave privada. Entiendo que es posible hacer eso, solo intento poner tantas barreras como sea posible.
¿Cuáles son las buenas maneras de hacer esto?
Gracias!
Daniel