Wenn Ihre Android-App eine der Cloud APIs von Firebase ML verwendet, sollten Sie vor der Produktionseinführung Ihrer App einige zusätzliche Schritte ausführen, um unbefugten API-Zugriff zu verhindern.
Bei Ihren Produktions-Apps 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 nur zur 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.
Sie benötigen die SHA-1-Signaturen Ihrer App. Weitere Informationen finden Sie unter Client authentifizieren.
Rufen Sie in der Firebase-Konsole Ihre Projekteinstellungen auf und wählen Sie den Tab Einstellungen aus.
Scrollen Sie nach unten zur Karte Meine Apps und wählen Sie Ihre Android-App aus.
Fügen Sie den App-Informationen die SHA-1-Signatur 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 zulässig ist:
Öffnen Sie in der Google Cloud-Konsole die Seite Anmeldedaten. Wählen Sie Ihr Projekt aus, wenn Sie dazu aufgefordert werden.
Öffnen Sie für jeden vorhandenen API-Schlüssel in der Liste die Bearbeitungsansicht.
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 zugreifen soll. Die Cloud Vision API darf nicht enthalten sein.
Wenn Sie die API-Einschränkungen eines API-Schlüssels konfigurieren, geben Sie explizit die APIs an, auf die der Schlüssel Zugriff hat. Wenn im Abschnitt API-Einschränkungen die Option Schlüssel nicht einschränken ausgewählt ist, kann ein API-Schlüssel standardmäßig für den Zugriff auf alle APIs verwendet werden, die für das Projekt aktiviert sind.
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 der API-Einschränkungen für den entsprechenden API-Schlüssel hinzufügen.
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 werden soll. 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.
Erstellen Sie einen neuen API-Schlüssel, der für die Entwicklung verwendet werden soll:
Öffnen Sie in der Google Cloud-Konsole die Seite Anmeldedaten. Wählen Sie Ihr Projekt aus, wenn Sie dazu aufgefordert werden.
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 Anwendungen möglich. Behandeln Sie ihn daher vertraulich.
Damit der neue API-Schlüssel für die Fehlerbehebung nicht bei der veröffentlichten App gehackt wird, geben Sie den API-Schlüssel für die Fehlerbehebung in einer Android-Manifestdatei an, die nur für Fehlerbehebungs-Builds verwendet wird:
Wenn Sie noch kein Debug-Manifest haben, erstellen Sie eines. Klicken Sie dazu auf Datei > Neu > Sonstiges > Android-Manifestdatei und wählen Sie
debug
aus den Zielquellensätzen aus.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>
Konfigurieren Sie Firebase ML in Ihrer Anwendung so, dass der Client mit dem Zertifikat-Fingerabdruckabgleich in der Produktion authentifiziert wird und nur in Fehlerbehebungs-Builds API-Schlüssel – der Schlüssel zur Fehlerbehebung – verwendet werden:
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 für die Markteinführung finden Sie Informationen dazu, wie Sie Ihre App für die Markteinführung vorbereiten, wenn Sie andere Firebase-Funktionen verwenden.