Proteja las credenciales en la nube de su aplicación Firebase ML para Android

Si su aplicación de Android utiliza una de las API en la nube de Firebase ML, antes de iniciar su aplicación en producción, debe tomar algunas medidas adicionales para evitar el acceso no autorizado a la API.

Para sus aplicaciones de producción, se asegurará de que solo los clientes autenticados puedan acceder a los servicios en la nube. (Tenga en cuenta que sólo los dispositivos no rooteados pueden autenticarse utilizando el método descrito).

Luego, creará una clave API solo de depuración que podrá utilizar para mayor comodidad durante las pruebas y el desarrollo.

1. Registra tus aplicaciones de producción con Firebase

Primero, registra tus aplicaciones de producción con Firebase.

  1. Asegúrese de tener las firmas SHA-1 de su aplicación. Consulte Autenticar a su cliente para saber cómo hacerlo.

  2. Vaya a su Configuración del proyecto en Firebase console, luego seleccione la pestaña Configuración .

  3. Desplázate hacia abajo hasta la tarjeta Tus aplicaciones y luego selecciona tu aplicación de Android.

  4. Agregue la firma SHA-1 de su aplicación a la información de su aplicación.

2. Restrinja el alcance de sus claves API

A continuación, configure sus claves API existentes para no permitir el acceso a la API de Cloud Vision:

  1. Abra la página Credenciales de la consola de Google Cloud. Cuando se le solicite, seleccione su proyecto.

  2. Para cada clave API existente en la lista, abra la vista de edición.

  3. En la sección Restricciones de API , seleccione Restringir clave y luego agregue a la lista todas las API a las que desea que tenga acceso la clave API. Asegúrese de no incluir la API de Cloud Vision.

    Cuando configuras las restricciones de API de una clave API, estás declarando explícitamente las API a las que tiene acceso la clave. De forma predeterminada, cuando la sección Restricciones de API tiene seleccionada la clave No restringir , se puede usar una clave API para acceder a cualquier API que esté habilitada para el proyecto.

Ahora, sus claves API existentes no otorgarán acceso a los servicios de aprendizaje automático en la nube, pero cada clave seguirá funcionando para cualquier API que haya agregado a su lista de restricciones de API .

Tenga en cuenta que si habilita API adicionales en el futuro, debe agregarlas a la lista de restricciones de API para la clave API aplicable.

3. Cree y utilice una clave API solo de depuración

Finalmente, cree una nueva clave API para usarla solo para el desarrollo. Firebase ML puede usar esta clave API para acceder a los servicios de Google Cloud en entornos donde la autenticación de aplicaciones no es posible, como cuando se ejecuta en emuladores.

  1. Cree una nueva clave API para usarla en el desarrollo:

    1. Abra la página Credenciales de la consola de Google Cloud. Cuando se le solicite, seleccione su proyecto.

    2. Haga clic en Crear credenciales > Clave API y tome nota de la nueva clave API. Esta clave permite el acceso a la API desde aplicaciones no autenticadas, así que manténgala confidencial .

  2. Para garantizar que la nueva clave API de depuración no se filtre con la aplicación lanzada, especifique la clave API de depuración en un archivo de manifiesto de Android utilizado solo para compilaciones de depuración:

    1. Si aún no tiene un manifiesto de depuración, cree uno haciendo clic en Archivo > Nuevo > Otro > Archivo de manifiesto de Android y seleccionando debug de los conjuntos de fuentes de destino.

    2. En el manifiesto de depuración, agregue la siguiente declaración:

      <application>
      <meta-data
          android:name="com.firebase.ml.cloud.ApiKeyForDebug"
          android:value="your-debug-api-key" />
      </application>
      
  3. En tu aplicación, configura Firebase ML para usar la coincidencia de huellas digitales de certificados para autenticar a tu cliente en producción y usar claves API (la clave de depuración) solo en compilaciones de depuración:

    Kotlin+KTX

    val optionsBuilder = FirebaseVisionCloudImageLabelerOptions.Builder()
    if (!BuildConfig.DEBUG) {
        // Requires physical, non-rooted device:
        optionsBuilder.enforceCertFingerprintMatch()
    }
    
    // Set other options. For example:
    optionsBuilder.setConfidenceThreshold(0.8f)
    // ...
    
    // And lastly:
    val options = optionsBuilder.build()
    FirebaseVision.getInstance().getCloudImageLabeler(options).processImage(myImage)

    Java

    FirebaseVisionCloudImageLabelerOptions.Builder optionsBuilder =
            new FirebaseVisionCloudImageLabelerOptions.Builder();
    if (!BuildConfig.DEBUG) {
        // Requires physical, non-rooted device:
        optionsBuilder.enforceCertFingerprintMatch();
    }
    
    // Set other options. For example:
    optionsBuilder.setConfidenceThreshold(0.8f);
    // ...
    
    // And lastly:
    FirebaseVisionCloudImageLabelerOptions options = optionsBuilder.build();
    FirebaseVision.getInstance().getCloudImageLabeler(options).processImage(myImage);

Próximos pasos

Consulta la lista de verificación de inicio para obtener información sobre cómo preparar tu aplicación para iniciarse cuando usas otras funciones de Firebase.