Bloquear usuarios no Android que llaman al servicio JSON
Mi aplicación de Android está llamando a un servicio JSON a través de HTTP y me gustaría permitir que mi aplicación solo llame al servicio y bloquee a otros.
¿Cuál es la mejor manera de hacerlo?
- Conexión a host local: 3000 rechazado en dispositivo Android
- En caché JSON de webservice en android - patrón?
- Compartir clases java entre el servicio web y el cliente
- ¿La mejor práctica para implementar retroalimentación de retorno a la actividad recreada?
- Android Obtener archivo pdf como resultado de httppost
Una forma en la que puedo pensar es usando cifrado de clave privada / pública. ¿Podemos insertar una clave privada de forma segura en la aplicación?
- ¿Qué authTokenType significa exactamente?
- Java REST cliente API para Android
- Cómo obtener actualizaciones en vivo a través de JSON a listview
- Recomendaciones para el formato / protocolo de .NET Web Service para Android, iPhone, etc.
- ¿Cómo funciona la sincronización de datos y cómo la uso en aplicaciones cliente-servidor?
- Cómo enviar una cadena json a un servicio .NET REST de java?
- Cómo implementar aplicación de chat para Android?
- ¿Pasar datos a los servicios web .net y obtener resultados?
Incluya algunos certificados / credenciales ocultos en su aplicación, diferentes para cada aplicación descargada. A continuación, utilice estos para autenticar. Incluso entonces esto puede ser fácilmente abusado, sin embargo, usted ha establecido su primera línea de defensa.
Después de eso, trate de establecer límites en la proporción en la que un solo cliente puede solicitar, acelerar y lista negra según sea necesario en base a IP, credenciales, etc.
Tan pronto como distribuya su aplicación, se puede desmontar. Así que una clave privada que se distribuiría con su aplicación podría ser extraída y reutilizada.
No hay manera completamente segura de hacer lo que usted está tratando de hacer. Pero hay maneras de restringir a los clientes, incluso si no son infalibles.
El más fácil (y menos seguro) sería restringir el acceso basado en el agente de usuario. Pero cualquier cliente puede falsificar el agente de usuario.
Un certificado / solución de cifrado es más robusto, pero como se ha dicho anteriormente, el certificado se puede extraer de su aplicación.
OAuth es utilizado por algunas aplicaciones en el mismo contexto que el tuyo. Sin embargo, OAuth no fue diseñado para aplicaciones de escritorio (o móviles) y también es vulnerable a la ingeniería inversa de la aplicación.
Podría autenticar al usuario (a través de un usuario / contraseña, u otro método estándar). En este caso, usted no restringe basado en la plataforma. A continuación, puede cerrar la cuenta de usuarios que abusan de su servicio. Esta es una solución segura, pero no exactamente la respuesta a su problema.
Lo más fácil sería utilizar HTTPS con autenticación.
Editado:
La pregunta aquí no es cómo asegurar el acceso a los servidores, sino cómo ocultar / asegurar las credenciales (contraseñas / certificados / etc.) en los teléfonos Android. La pregunta debe ser: cómo ocultar datos dentro de las aplicaciones de Android.
Una solución es usar un obfuscator como ProGuard .
- Android equivalente al iPhone indexado UITableView
- Proceso para comprimir una imagen para subirla a un servidor en Android