Si esto es para aplicaciones nativas , puedes probar lo siguiente,
- Almacene una clave de acceso en su paquete de aplicaciones. Nadie más que el propietario de la aplicación (usted mismo) puede tener esto.
- Cambie su API para que solo tengan éxito las solicitudes con la clave de acceso establecida en el encabezado.
- Use HTTPS para que nadie pueda leer la clave de acceso cifrada.
Si no usa HTTPS, aún puede codificar manualmente la clave de acceso con algo en el encabezado (solo el servidor y la lógica de la aplicación saben cómo hacerlo) para que el hombre del medio no pueda pretender ser su aplicación.
Si esto es solo para aplicaciones web,
Primero sugeriría envolver la aplicación web pura dentro de una aplicación nativa (a.k.a. Aplicación híbrida) para que pueda lograr la protección descrita anteriormente, al agrupar una clave secreta dentro de la aplicación. El desarrollo de una aplicación nativa con una sola vista web no debería costar demasiado.
Sin embargo, si eso no es posible, entonces su aplicación sigue siendo una aplicación web pura, aquí hay una opción potencial,
- Cuando el servidor sirve a la aplicación web, proporcione una clave de acceso.
- Cuando la aplicación web realiza una llamada a la API, debe proporcionar una versión con hash de la clave de acceso.
- La forma en que los hashes de la aplicación web depende de la lógica que se implementa en los códigos minificados + ofuscados.
- La API de backend luego valida el hash aplicando la misma lógica oculta a la clave de acceso almacenada para calcular el hash y ver si coincide.
- Puede cambiar la lógica oculta y la clave de acceso tan frecuentemente como sea necesario para reducir la posibilidad de que alguien obtenga el hash correcto.
Esto, por supuesto, no es a prueba de balas, pero como usted sabe, no existe una seguridad perfecta y esto probablemente logra el propósito (y es de esperar que se ajuste a los requisitos). Sin embargo, diría que ir híbrido es más rentable.