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

Wenn deine Android-App eine der Cloud-APIs von Firebase ML verwendet, solltest du vor der Veröffentlichung der App App in der Produktion ist, sollten Sie einige zusätzliche Schritte unternehmen, nicht autorisierten API-Zugriff.

Bei Ihren Produktions-Apps sorgen Sie dafür, dass nur authentifizierte Clients den Zugriff auf auf Cloud-Dienste zugreifen. Nur nicht gerootete Geräte können sich mit der beschriebenen Methode.)

Anschließend erstellen Sie einen API-Schlüssel nur für die Fehlerbehebung, den Sie während der Tests 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 um zu erfahren, wie das geht.

  2. aufrufen Projekteinstellungen in der Firebase-Konsole und wählen Sie die Einstellungen aus. .

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

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

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

Als Nächstes konfigurieren Sie Ihre vorhandenen API-Schlüssel so, dass der Zugriff auf Cloud Vision nicht zugelassen wird API:

  1. Öffnen Sie die Seite Anmeldedaten des Google Cloud-Konsole. 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 dann Listen Sie alle APIs auf, auf die der API-Schlüssel Zugriff haben soll. Achten Sie darauf, die Cloud Vision API nicht einzubeziehen.

    Wenn Sie die API-Einschränkungen eines API-Schlüssels konfigurieren, Deklaration der APIs, auf die der Schlüssel Zugriff hat Wenn die API im Abschnitt Schlüssel nicht einschränken ausgewählt ist, kann ein API-Schlüssel wird für den Zugriff auf eine API verwendet, die für das Projekt aktiviert ist.

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

Hinweis: Wenn Sie in Zukunft weitere APIs aktivieren, müssen Sie sie zum die Liste der API-Einschränkungen für den jeweiligen API-Schlüssel.

3. API-Schlüssel nur zum Debuggen erstellen und verwenden

Erstellen Sie abschließend 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 die App-Authentifizierung nicht möglich ist, z. B. bei der Ausführung auf Emulatoren.

  1. Erstellen Sie einen neuen API-Schlüssel, der für die Entwicklung verwendet werden soll:

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

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

  2. So sorgen Sie dafür, dass der neue API-Schlüssel zur Fehlerbehebung nicht bei der veröffentlichten App gestohlen wird: Debug API-Schlüssel in einer Android-Manifestdatei angeben, die nur für die Fehlerbehebung verwendet wird Builds:

    1. Wenn Sie noch kein Debug-Manifest haben, erstellen Sie eines, indem Sie auf Datei > Neu > Sonstiges > Android-Manifestdatei und Auswahl von debug aus den Zielquellsätzen.

    2. Füge 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 Firebase ML in Ihrer App so, dass der Zertifikat-Fingerabdruckabgleich mit Authentifizieren Sie Ihren Client in der Produktion und verwenden Sie API-Schlüssel – das Debugging Schlüssel – nur in Debug-Builds:

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

Nächste Schritte

In der Checkliste zur Einführung finden Sie Informationen zur Ihre App für die Einführung vorbereiten, wenn Sie andere Firebase-Funktionen verwenden.