Permitir que sólo mis aplicaciones Android ejecuten api de punto final en java

He creado endpoint apis pero el problema es que cualquier persona con mi ID de proyecto puede ir a api explorer y ejecutar los apis. He puesto solamente la identificación del cliente del android (usar el almacén de la llave del depurador) encima de la declaración de la clase del punto final pero todavía puedo ir al modo del incógnito y ejecutar el apis. ¿Cómo puedo restringir los apis para que sólo mis aplicaciones Android tengan acceso y todos los demás se lanzarán con alguna excepción?

Las API pueden protegerse añadiendo un parámetro clave que tiene que ser correcto para que se invoque la API. Si el usuario de la API no conoce la clave, no podrá utilizar la API incluso con el Explorador de API.

Las ventajas de este enfoque es que es simple de hacer, permítale experimentar con el API si lo necesita.

Las desventajas incluyen ser muy fácil de eludir por un usuario determinado, simplemente mirando el tráfico.

Debe asegurarse de que ha codificado su API / backend correctamente para aceptar sólo el clientId de su aplicación; Asegúrese de que no ve com.google.api.server.spi.Constant.API_EXPLORER_CLIENT_ID como una de las clientIds de su anotación @Api en la clase API:

 @Api( name = "myApi", version = "v1", clientIds = {<your android clientId>}, ) public class myApi { // your API code here } 

Si el ID de cliente del API Explorer está presente, le permitirá ejecutar su API desde la API. No estoy 100% seguro, pero creo que todavía puede ver su forma de API del explorador sin el ID de cliente, pero la ejecución se evitará con un error.

Este artículo tiene más información: https://cloud.google.com/appengine/docs/java/endpoints/auth#Specifying_authorized_clients_in_the_API_backend

Es posible que desee pensar en poner autenticación adecuada alrededor de las llamadas de punto final (es decir, comprobaciones de autenticación por usuario en cada método) si es particularmente sensible. Simplemente agregar un parámetro de usuario a @ApiMethod debería ser suficiente para obligar a los usuarios a auth antes de ejecutar cada método.

Espero que ayude.

Puede utilizar en cada api allowed_client_ids como ANDROID_CLIENT_ID solamente, puede ser una posible solución.

Creo que esto podría ayudarte si aún no lo has seguido: https://cloud.google.com/appengine/docs/python/endpoints/auth#Python_Creating_OAuth_20_client_IDs

Utilice criptografía de clave simétrica junto con firmas digitales para esto. Sin embargo, primero tendrás que compartir la clave con la aplicación de Android.

Así es como funcionaría.

Siempre que la aplicación de Android esté realizando una solicitud de red, se toma la URL y los parámetros, luego se lo haschará y, a continuación, se cifrará con la clave privada compartida. A continuación, agrega la firma como otro parámetro a la dirección URL.

En el extremo de recepción, su API web validará si la solicitud procede únicamente de su aplicación de Android.

Tenga en cuenta que esto funcionará SOLAMENTE para su aplicación. No funcionará como una forma de capturar todas las solicitudes genéricas de Android /

Estos son algunos puntos a considerar:

Cloud Endpoints ha estado soportando el ANDROID CLIENT ID y la firma de paquetes, por lo que al menos debe cuidar el hecho de que sólo una aplicación Android firmada de su parte puede acceder al punto final

.

Si desea eliminar los clientes Web de acceso, entonces probablemente buscar en los encabezados y agentes HTTP para ver si hay una manera segura de identificar estos clientes web. Sin embargo, esto requeriría que usted escribe su propia lógica de autorización en el Ya que no creo que la infraestructura de los puntos finales pueda encargarse de esto automáticamente para usted

.

Eliminar el acceso para todos a través de las anotaciones podría ser problemático si desea una forma rápida de utilizar el Explorador de API para probar la API. Por lo tanto, mantenga disponible el acceso al Explorador de API.

  • Prácticas recomendadas para registro de cuentas / cantar / autenticar en aplicaciones para dispositivos móviles
  • ¿Dónde debo almacenar números de tarjeta de crédito en Android?
  • Verificar que Android apk no ha sido reempaquetado?
  • Lee la huella digital de la computadora RSA desde Android
  • Aplicación Android con contraseña protegida
  • ¿El facebook para Android usa https?
  • De android - CHANGE_COMPONENT_ENABLED_STATE
  • Seguridad de la carpeta de activos de Android
  • Características de seguridad en Android
  • ¿Solicitar permiso personalizado con nivel de protección = firma con una firma que no coincide?
  • Seguridad de activos en Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.