Cloud-Anmeldedaten Ihrer Firebase ML Android-App schützen

Wenn Ihre Android-App eine der Cloud-APIs von Firebase ML verwendet, sollten Sie vor der Einführung Ihrer App in der Produktionsumgebung zusätzliche Schritte unternehmen, um unbefugten API-Zugriff zu verhindern.

Für Ihre Produktionsanwendungen sorgen Sie dafür, dass nur authentifizierte Clients auf Cloud-Dienste zugreifen können. (Hinweis: Nur nicht gerootete Geräte können sich mit der beschriebenen Methode authentifizieren.)

Anschließend erstellen Sie einen API-Schlüssel, der nur für die Fehlerbehebung verwendet werden kann und den Sie während des Testens und der Entwicklung verwenden können.

1. Produktions-Apps bei Firebase registrieren

Registrieren Sie zuerst Ihre Produktions-Apps bei Firebase.

  1. Sie benötigen die SHA-1-Signaturen Ihrer App. Weitere Informationen finden Sie unter Client authentifizieren.

  2. Rufen Sie in der Firebase-Konsole die Projekteinstellungen  auf und wählen Sie den Tab Einstellungen aus.

  3. Scrollen Sie nach unten zur Karte Meine Apps und wählen Sie Ihre Android-App aus.

  4. Fügen Sie die SHA-1-Signatur Ihrer App den Informationen Ihrer App hinzu.

2. Umfang Ihrer API-Schlüssel einschränken

Konfigurieren Sie als Nächstes Ihre vorhandenen API-Schlüssel so, dass der Zugriff auf die Cloud Vision API nicht mehr möglich ist:

  1. Öffnen Sie in der Google Cloud-Konsole die Seite Anmeldedaten. Wählen Sie Ihr Projekt aus, wenn Sie dazu aufgefordert werden.

  2. Öffnen Sie für jeden vorhandenen API-Schlüssel in der Liste die Bearbeitungsansicht.

  3. Wählen Sie im Abschnitt API-Einschränkungen die Option Schlüssel einschränken aus und fügen Sie der Liste alle APIs hinzu, auf die der API-Schlüssel Zugriff haben soll. Die Cloud Vision API darf nicht enthalten sein.

    Wenn Sie die API-Einschränkungen eines API-Schlüssels konfigurieren, deklarieren Sie explizit die APIs, auf die der Schlüssel Zugriff hat. Wenn im Abschnitt API-Einschränkungen standardmäßig Schlüssel nicht einschränken ausgewählt ist, kann ein API-Schlüssel für den Zugriff auf jede API verwendet werden, die für das Projekt aktiviert ist.

Ihre vorhandenen API-Schlüssel gewähren jetzt keinen Zugriff mehr auf Cloud ML-Dienste. Jeder Schlüssel funktioniert jedoch weiterhin für alle APIs, die Sie der Liste der API-Einschränkungen hinzugefügt haben.

Wenn Sie in Zukunft zusätzliche APIs aktivieren, müssen Sie sie der Liste API-Einschränkungen für den entsprechenden API-Schlüssel hinzufügen.

3. Nur für das Debugging bestimmten API-Schlüssel erstellen und verwenden

Erstellen Sie schließlich einen neuen API-Schlüssel, der nur für die Entwicklung verwendet wird. Firebase ML kann mit diesem API-Schlüssel auf Google Cloud-Dienste in Umgebungen zugreifen, in denen keine App-Authentifizierung möglich ist, z. B. bei der Ausführung auf Emulatoren.

  1. Erstellen Sie einen neuen API-Schlüssel für die Entwicklung:

    1. Öffnen Sie in der Google Cloud-Konsole die Seite Anmeldedaten. Wählen Sie Ihr Projekt aus, wenn Sie dazu aufgefordert werden.

    2. Klicken Sie auf Anmeldedaten erstellen > API-Schlüssel und notieren Sie sich den neuen API-Schlüssel. Mit diesem Schlüssel ist der API-Zugriff von nicht authentifizierten Apps möglich. Bewahren Sie diesen Schlüssel daher vertraulich auf.

  2. Damit der neue Debug-API-Schlüssel nicht mit Ihrer veröffentlichten App weitergegeben wird, geben Sie ihn in einer Android-Manifestdatei an, die nur für Debug-Builds verwendet wird:

    1. Wenn Sie noch kein Debug-Manifest haben, erstellen Sie eines, indem Sie auf Datei > Neu > Sonstiges > Android-Manifestdatei klicken und debug aus den Zielquellsets auswählen.

    2. Fügen Sie dem Debug-Manifest die folgende Deklaration hinzu:

      <application>
      <meta-data
          android:name="com.firebase.ml.cloud.ApiKeyForDebug"
          android:value="your-debug-api-key" />
      </application>
  3. Konfigurieren Sie in Ihrer App Firebase ML so, dass der Client in der Produktion mithilfe des Zertifikat-Fingerabdrucks authentifiziert wird und API-Schlüssel (den Debug-Schlüssel) nur in Debug-Builds verwendet werden:

    Kotlin

    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);

Nächste Schritte

Informationen zur Vorbereitung Ihrer App auf den Start bei Verwendung anderer Firebase-Funktionen finden Sie in der Startcheckliste.