Restringir API pública para acceder desde una aplicación única

1

Tengo una API REST en un servidor y una aplicación para teléfonos Android que, en su mayoría, realiza llamadas a esa API y presenta la información al usuario.

Debido a que la aplicación debe ser una forma rápida de buscar información pública, se requirió que el usuario final no realice ningún tipo de autenticación.

Ahora esto abre el servidor donde vive la API para los ataques. No nos preocupa que la información sea robada al hacerse pasar por un usuario de la aplicación o cualquier otra cosa, ya que toda la información es de acceso público, pero un atacante podría, por ejemplo, hacer un script para hacer llamadas continuamente a nuestra API y sobrecargar el servidor.

Las cuotas y tales no se pueden usar sin autenticación y una carga adicional de información de usuario en la base de datos, el agente de usuario se puede falsificar ... Al final, lo más cercano a lo que necesito que pude encontrar fue en esta respuesta a una pregunta similar , donde se sugiere que guarde una clave de acceso en mi aplicación y la use para hacer llamadas a mi API.

Ahora estas son mis preguntas con respecto a toda la situación y la seguridad:

  1. Es implícito que si uso HTTPS, estoy listo si solo incluyo la clave en los encabezados. ¿Realmente no hay manera de ver esta clave en la solicitud? (Estoy usando HttpClient de Angular). La URL del servidor de prueba es https, pero como estoy en modo de depuración, puedo ver claramente toda la información de la solicitud en el nivel de la aplicación. ¿Está la aplicación ejecutada en mi teléfono a salvo de los atacantes que buscan el espacio de memoria de la aplicación o algo así?
  2. A partir de la última pregunta, ¿cuál es la mejor manera de almacenar esta clave de aplicación dentro de la apk? ¿Un archivo json, una cadena dentro del código angular ...?
  3. El servidor de prueba es HTTPS, pero existe cierta discusión sobre la eliminación del servicio api en un servidor secundario que todavía es HTTP. La respuesta enlazada implica que, de alguna manera, debería tener la clave, pero ¿no está disponible para ser extraída de la solicitud? Seguramente implicaría un esfuerzo adicional de mantener el cambio de clave de hash de manera que el servidor pueda seguir comprobando que es un hash de la clave original, pero ¿no se convierte en una cuestión de encontrar el algoritmo de hash en el código? (¿Es este un buen lugar para solicitar un hashing seguro que podría implementarse / usarse en una aplicación Angular?)
  4. ¿Hay alguna otra manera de asegurar la api en esta configuración que no conozco? Una vez más, es básicamente una API pública, pero necesitamos que sea accesible solo desde una aplicación sin autenticación de usuario.
pregunta Nicolás Marzano 21.05.2018 - 22:27
fuente

0 respuestas

Lea otras preguntas en las etiquetas