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?

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?

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 .

  • JSON Cadena devuelta desde el servicio web SOAP que no contiene registros para la tabla
  • Bouncy Castle Keystore (BKS): java.io.IOException: Versión incorrecta del almacén de claves
  • Ksoap2 Android - ¿cómo especificar un espacio de nombres para las propiedades secundarias de un objeto complejo?
  • Cómo utilizar la sesión para trabajar entre php webservices y android
  • Cómo llamar a un servicio web SOAP en Android
  • Aplicación de Android CursorWindow error de memoria
  • ¿Cómo llamar a un servicio web RESTful de Android?
  • Pase y reciba el objeto JSON de Jersey Resftul webservice desde android
  • Error: NullPointerAccess: La variable "" sólo puede ser null en esta ubicación
  • Cómo llamar a un json webservice a través de android
  • Desarrollador web visual Servicio web en depuración HTTP / 1.1 400 Solicitud incorrecta
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.