Weitere Informationen zum Verwenden und Verwalten von API-Schlüsseln für Firebase
Ein API-Schlüssel ist ein eindeutiger String, mit dem Anfragen bei der Interaktion mit Firebase- und Google-Diensten an Ihr Firebase-Projekt weitergeleitet werden. Auf dieser Seite finden Sie grundlegende Informationen zu API-Schlüsseln sowie Best Practices für die Verwendung und Verwaltung von API-Schlüsseln mit Firebase-Apps.
Allgemeine Informationen zu API-Schlüsseln und Firebase
API-Schlüssel für Firebase unterscheiden sich von herkömmlichen API-Schlüsseln
Im Gegensatz zur üblichen Verwendung von API-Schlüsseln werden API-Schlüssel für Firebase-Dienste nicht verwendet, um den Zugriff auf Backendressourcen zu steuern. Das ist nur mit Firebase Security Rules (um zu steuern, welche Endnutzer auf Ressourcen zugreifen können) und Firebase App Check (um zu steuern, welche Apps auf Ressourcen zugreifen können) möglich.
Normalerweise müssen Sie API-Schlüssel sorgfältig schützen, z. B. mit einem Tresordienst oder indem Sie die Schlüssel als Umgebungsvariablen festlegen. API-Schlüssel für Firebase-Dienste können jedoch in Code oder in eingecheckten Konfigurationsdateien eingefügt werden.
Firebase-Apps für Apple: Den automatisch abgeglichenen API-Schlüssel finden Sie in der Firebase-Konfigurationsdatei GoogleService-Info.plist im Feld API_KEY.
Firebase-Android-Apps: Den automatisch abgeglichenen API-Schlüssel finden Sie in der Firebase-Konfigurationsdatei google-services.json im Feld current_key.
Firebase-Webanwendungen: Suchen Sie im Firebase-Config-Objekt im Feld apiKey nach dem automatisch abgeglichenen API-Schlüssel.
API-Schlüssel verwenden
API-Schlüssel werden verwendet, um Ihr Firebase-Projekt bei der Interaktion mit Firebase-/Google-Diensten zu identifizieren. Insbesondere werden sie verwendet, um API-Anfragen für Kontingente und Abrechnung Ihrem Projekt zuzuordnen. Sie eignen sich auch für den Zugriff auf öffentliche Daten.
Sie können einen API-Schlüssel beispielsweise explizit verwenden, indem Sie seinen Wert als Abfrageparameter in einen REST API-Aufruf übergeben. In diesem Beispiel wird gezeigt, wie du eine Anfrage an die Dynamic Links Link Shortener API senden könntest:
POST https://firebasedynamiclinks.googleapis.com/v1/shortLinks?key=API_KEY
Wenn Ihre App eine Firebase API aufruft, für die ein vom mobilen/Webclient bereitgestellter API-Schlüssel erforderlich ist, sucht Ihre App automatisch in der Firebase-Konfigurationsdatei/dem Firebase-Konfigurationsobjekt nach dem API-Schlüssel Ihres Projekts. Sie können jedoch API-Schlüssel für Ihre App mit einem anderen Mechanismus angeben, z. B. mithilfe von Umgebungsvariablen.
Prüfen Sie die API-Schlüssel und wenden Sie geeignete Einschränkungen an (empfohlen)
Es ist zwar nicht erforderlich, einen API-Schlüssel für Firebase-Dienste als Secret zu behandeln, Sie sollten jedoch die in diesem Abschnitt beschriebenen Einschränkungen und Limits prüfen und anwenden.
APIs prüfen, die automatisch der Zulassungsliste für Ihre Firebase API-Schlüssel hinzugefügt wurden
Wenn Firebase einen API-Schlüssel in Ihrem Projekt erstellt, fügen wir diesem Schlüssel automatisch API-Einschränkungen hinzu. Die APIs, die dieser Zulassungsliste hinzugefügt wurden, sind Firebase-bezogene APIs, für die der Client zusammen mit dem Aufruf einen API-Schlüssel angeben muss. Die meisten APIs, die für die Nutzung von Firebase-Diensten erforderlich sind, müssen nicht auf der Zulassungsliste für Ihre API-Schlüssel stehen.
Da Firebase die erforderlichen APIs für alle Firebase-Dienste hinzufügt, kann die Zulassungsliste für einen API-Schlüssel APIs für Produkte enthalten, die Sie nicht verwenden.
Sie können APIs von der Zulassungsliste entfernen, aber Achten Sie darauf, dass Sie nicht die APIs entfernen, die für Firebase und die von Ihnen verwendeten Firebase-Dienste erforderlich sind. Weitere Informationen finden Sie in der Liste der Firebase-bezogenen APIs, die für jeden Dienst / jedes Produkt auf der Zulassungsliste stehen müssen. Andernfalls erhalten Sie Fehler, wenn Sie Firebase-Dienste aufrufen.
Kontingent verkleinern, wenn Sie passwortbasierte Authentication verwenden
Wenn Sie eine passwortbasierte Firebase Authentication verwenden und jemand Ihren API-Schlüssel in die Hände bekommt, kann er nicht auf die Datenbank oder die Cloud Storage-Daten Ihres Firebase-Projekts zugreifen, sofern diese Daten durch Firebase Security Rules geschützt sind. Sie können jedoch Ihren API-Schlüssel verwenden, um auf die Authentifizierungsendpunkte von Firebase zuzugreifen und Authentifizierungsanfragen an Ihr Projekt zu senden.
Um das Risiko zu verringern, dass jemand einen API-Schlüssel für einen Brute-Force-Angriff missbraucht, können Sie das Standardkontingent der identitytoolkit.googleapis.com-Endpunkte so festlegen, dass es den normalen Traffic-Anforderungen Ihrer App entspricht. Wenn Sie dieses Kontingent verschärfen und Ihre App plötzlich mehr Nutzer hat, kann es zu Anmeldefehlern kommen, bis Sie das Kontingent erhöhen.
Sie können die API-Kontingente Ihres Projekts in der Google Cloud-Konsole ändern.
Separate, eingeschränkte API-Schlüssel für Dienste verwenden, die nicht zu Firebase gehören
API-Schlüssel, die für Firebase-Dienste verwendet werden, müssen zwar im Allgemeinen nicht als geheim behandelt werden, Sie sollten jedoch bei API-Schlüsseln, die Sie mit anderen Google Cloud APIs verwenden, einige zusätzliche Vorsichtsmaßnahmen treffen.
Wenn Sie eine Google Cloud API (auf einer beliebigen Plattform) verwenden, die nicht für einen Firebase-Dienst oder ein Firebase-Produkt bestimmt ist, empfehlen wir Ihnen dringend, separate, eingeschränkte API-Schlüssel für die Verwendung mit diesen APIs zu erstellen. Das ist besonders wichtig, wenn die API für einen abrechenbaren Google Cloud-Dienst verwendet wird.
Wenn Sie beispielsweise Firebase ML und die Cloud Vision APIs unter iOS verwenden, sollten Sie separate API-Schlüssel erstellen, die Sie nur für den Zugriff auf die Cloud Vision APIs verwenden.
Wenn Sie separate, eingeschränkte API-Schlüssel für nicht Firebase-APIs verwenden, können Sie die Schlüssel bei Bedarf wechseln oder ersetzen und den API-Schlüsseln zusätzliche Einschränkungen hinzufügen, ohne die Nutzung der Firebase-Dienste zu beeinträchtigen.
Anleitung zum Erstellen API-spezifischer Schlüssel
In dieser Anleitung wird beschrieben, wie Sie einen separaten, eingeschränkten API-Schlüssel für eine gefälschte API namens Super Service API erstellen.
Schritt 1: Bestehende API-Schlüssel so konfigurieren, dass der Zugriff auf Super Service API nicht 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 API, für die Sie einen separaten API-Schlüssel erstellen (in diesem Beispiel Super Service 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 mit einem API-Schlüssel standardmäßig auf jede API zugegriffen werden, die für das Projekt aktiviert ist.
Ihre vorhandenen API-Schlüssel gewähren jetzt keinen Zugriff mehr auf Super Service API. Jeder Schlüssel funktioniert jedoch weiterhin für alle APIs, die Sie der Liste der API-Einschränkungen hinzugefügt haben.
Schritt 2: Neuen API-Schlüssel für den Zugriff auf Super Service API erstellen und verwenden
Kehren Sie zur Seite Anmeldedaten zurück. Prüfen Sie, ob Ihr Firebase-Projekt noch ausgewählt ist.
Klicken Sie auf Anmeldedaten erstellen > API-Schlüssel. Notieren Sie sich den neuen API-Schlüssel und klicken Sie dann auf Schlüssel einschränken.
Wählen Sie im Abschnitt API-Einschränkungen die Option Schlüssel einschränken aus und fügen Sie der Liste only (nur) die Super Service API hinzu.
Dieser neue API-Schlüssel gewährt nur Zugriff auf die Super Service API.
Konfigurieren Sie Ihre App und Dienste für die Verwendung des neuen API-Schlüssels.
Wenn Sie verschiedene Firebase-Projekte für verschiedene Umgebungen einrichten, z. B. für Staging und Produktion, ist es wichtig, dass jede App-Instanz mit dem entsprechenden Firebase-Projekt interagiert. Ihre Staging-App-Instanz sollte beispielsweise niemals mit Ihrem Produktions-Firebase-Projekt kommunizieren. Das bedeutet auch, dass Ihre Staging-App API-Schlüssel verwenden muss, die mit Ihrem Firebase-Staging-Projekt verknüpft sind.
Um Probleme beim Übertragen von Codeänderungen von der Entwicklung über das Staging bis zur Produktion zu vermeiden, sollten Sie API-Schlüssel nicht direkt in den Code einfügen, sondern sie entweder als Umgebungsvariablen festlegen oder in eine Konfigurationsdatei einfügen.
Wenn Sie Firebase Local Emulator Suite für die Entwicklung zusammen mit Firebase ML verwenden, müssen Sie einen API-Schlüssel nur zum Debuggen erstellen und verwenden. Eine Anleitung zum Erstellen dieser Art von Schlüssel findest du in der Firebase ML-Dokumentation.
FAQs und Fehlerbehebung
Häufig gestellte Fragen
Sind API-Schlüssel für Firebase-Dienste standardmäßig eingeschränkt?
Ja. Standardmäßig werden für alle API-Schlüssel, die von Firebase automatisch für die Verwendung mit Firebase-bezogenen APIs bereitgestellt werden, automatisch API-Einschränkungen angewendet. Liste der Firebase-bezogenen APIs, die auf dieser Zulassungsliste stehen
Die APIs, die dieser Zulassungsliste hinzugefügt werden, sind APIs, die von Firebase-Diensten aus Clientcode aufgerufen werden und API-Schlüssel zur Identifizierung Ihres Firebase-Projekts oder Ihrer Firebase-App erfordern. Die meisten APIs, die für die Verwendung von Firebase-Diensten erforderlich sind, müssen nicht auf der Zulassungsliste für Ihre API-Schlüssel stehen.
Da Firebase die erforderlichen APIs für alle Firebase-Dienste hinzufügt, kann die Zulassungsliste für einen API-Schlüssel APIs für Produkte enthalten, die Sie nicht verwenden. Sie können APIs von der Zulassungsliste entfernen. Achten Sie jedoch darauf, dass Sie keine APIs entfernen, die für Firebase und die von Ihnen verwendeten Firebase-Dienste erforderlich sind. Weitere Informationen finden Sie in der Liste der Firebase-bezogenen APIs, die für jeden Dienst / jedes Produkt auf der Zulassungsliste stehen müssen. Andernfalls erhalten Sie Fehler, wenn Sie Firebase-Dienste aufrufen.
Sie können alle Ihre API-Schlüssel und ihre „API-Einschränkungen“ im Bereich APIs & Dienste > Anmeldedaten in der Google Cloud Console aufrufen.
So werden diese „API-Einschränkungen“ von Firebase angewendet:
Ab Mai 2024 sind alle neuen API-Schlüssel, die automatisch über Firebase bereitgestellt werden, automatisch auf die Liste der Firebase-bezogenen APIs beschränkt.
Im Mai 2024 werden alle vorhandenen und uneingeschränkten API-Schlüssel, die zuvor automatisch über Firebase bereitgestellt wurden, auf die Liste der Firebase-bezogenen APIssowie alle derzeit aktivierten APIs des Projekts beschränkt.
Bestehende und bereits eingeschränkte API-Schlüssel, die zuvor automatisch von Firebase bereitgestellt wurden, wurden nicht geändert.
Vorhandene API-Schlüssel, die nicht von Firebase automatisch bereitgestellt wurden, wurden nicht geändert.
Wie finde ich heraus, welcher API-Schlüssel mit meiner Firebase-App verknüpft ist?
Sie können mit einer der folgenden Optionen ermitteln, welcher API-Schlüssel mit Ihrer Firebase App verknüpft ist:
Firebase-Konsole
Gehen Sie zu settingsProjekteinstellungen und scrollen Sie dann nach unten zur Karte Meine Apps.
Wählen Sie die gewünschte App aus.
Rufen Sie die Firebase-Konfigurationsdatei/das Firebase-Konfigurationsobjekt für die gewünschte App ab und suchen Sie dann den API-Schlüssel:
Apple: Laden Sie die GoogleService-Info.plist herunter und suchen Sie nach dem Feld API_KEY.
Android: Laden Sie die google-services.json herunter, suchen Sie die Konfiguration für die gewünschte App (anhand des Paketnamens) und dann das Feld current_key.
Web: Wählen Sie die Option Config aus und suchen Sie dann nach dem Feld apiKey.
Firebase CLI
Rufen Sie die Firebase-Konfigurationsdatei/das Firebase-Konfigurationsobjekt für die gewünschte App mit dem folgenden Befehl ab:
firebase apps:sdkconfig PLATFORMFIREBASE_APP_ID
PLATFORM (eine der folgenden Optionen): IOS | ANDROID | WEB
FIREBASE_APP_ID: Die von Firebase zugewiesene eindeutige Kennung für Ihre Firebase-App (App-ID ermitteln)
Suchen Sie in der ausgedruckten Firebase-Konfiguration der App nach dem API-Schlüssel:
Apple: Suchen Sie das Feld API_KEY.
Android: Suchen Sie die Konfiguration für die gewünschte App (Paketname) und dann das Feld current_key.
Web: Feld apiKey finden
REST API
Rufe die apiKeyId (die UID) des API-Schlüssels ab, indem du den entsprechenden Endpunkt für die gewünschte App aufrufst und den apiKeyId-Wert an den nächsten Schritt übergibst.
Dieser keyString ist mit dem Wert identisch, der im Konfigurationsartefakt der App zu finden ist (Apple | Android | Web).
Kann ich in meiner Firebase-Konfigurationsdatei/-objekt zwei API-Schlüssel für dieselbe Firebase-App angeben?
Firebase-Apple-Apps: Jede App hat eine eigene Konfigurationsdatei und kann nur einen API-Schlüssel enthalten.
Firebase-Android-Apps: Alle Android-Apps im Firebase-Projekt sind in derselben Konfigurationsdatei aufgeführt. Für jede App kann nur ein API-Schlüssel aufgeführt sein. Für jede App in dieser Konfigurationsdatei kann jedoch ein anderer Schlüssel aufgeführt sein.
Firebase-Webanwendungen: Jede App hat ein eigenes Konfigurationsobjekt und kann nur einen API-Schlüssel enthalten.
Sie können jedoch mehrere API-Schlüssel für eine App verwenden. Sie müssen einen Mechanismus für Ihre App bereitstellen, um auf diese anderen API-Schlüssel zuzugreifen, z. B. über eine Umgebungsvariable. Der Mechanismus für den Zugriff auf die anderen API-Schlüssel darf nicht davon abhängen, dass diese API-Schlüssel in Ihrer Firebase-Konfigurationsdatei/-objekt aufgeführt sind.
Woher weiß Firebase, welcher API-Schlüssel einer App zugeordnet werden soll (z. B. in der Firebase-Konfigurationsdatei/dem Firebase-Objekt)?
Wenn Firebase keine übereinstimmenden eingeschränkten Schlüssel findet, werden in der Konfigurationsdatei/dem Konfigurationsobjekt die iOS key für Apple-Apps, die Android key für Android-Apps und die Browser key für Webanwendungen aufgeführt. Dabei wird davon ausgegangen, dass diese Schlüssel vorhanden sind und keine „App-Einschränkungen“ haben, die eine Übereinstimmung mit der App verhindern.
Kann ich den API-Schlüssel und das Feld manuell aus meiner Firebase-Konfigurationsdatei/meinem Firebase-Konfigurationsobjekt löschen?
Ja, Sie können Ihren API-Schlüssel manuell aus Ihrer Konfigurationsdatei/Ihrem Konfigurationsobjekt löschen. Sie müssen jedoch einen anderen Mechanismus für Ihre App bereitstellen, um auf einen API-Schlüssel zuzugreifen (z. B. über eine Umgebungsvariable). Andernfalls schlagen alle Aufrufe an Firebase-Dienste fehl.
Kann ich meine Firebase-Konfigurationsdatei/-objekte manuell mit anderen API-Schlüsseln bearbeiten?
Ja, Sie können eine Konfigurationsdatei/ein Konfigurationsobjekt manuell bearbeiten, um einer App einen anderen API-Schlüssel zuzuordnen.
Kann ich einen API-Schlüssel von einem Firebase-Projekt in ein anderes verschieben?
Nein. Ein API-Schlüssel identifiziert nur ein bestimmtes Projekt und kann nicht in ein anderes Projekt verschoben werden.
Was passiert, wenn ich einen in der Google Cloud Console aufgeführten API-Schlüssel lösche?
Wenn Sie einen API-Schlüssel löschen, der von einer App verwendet wird, schlagen API-Aufrufe von dieser App fehl. Möglicherweise erhalten Sie Berichte, E-Mails oder Fehlermeldungen, dass Sie versuchen, einen ungültigen API-Schlüssel zu verwenden.
Das Löschen eines API-Schlüssels ist endgültig und kann nicht rückgängig gemacht werden.
Welche APIs sind auf der Zulassungsliste „API-Einschränkungen“ für einen Firebase API-Schlüssel erforderlich?
Bei einem Firebase API-Schlüssel müssen nur die APIs auf der Zulassungsliste „API-Einschränkungen“ des Schlüssels stehen, für die der Client beim Aufruf einen API-Schlüssel angeben muss. Diese Anforderung gilt nur für sehr wenige Firebase-bezogene APIs. Die meisten in Ihrem Projekt aktivierten Firebase-bezogenen APIs müssen nicht auf der Zulassungsliste „API-Einschränkungen“ des Schlüssels stehen.
* Nur erforderlich, wenn Sie den Firebase API-Schlüssel mit Drittanbietertools oder mit direktem REST-Zugriff auf den Firebase-Dienst / das Firebase-Produkt verwenden.
** Erforderlich für ältere Versionen des SDK des Produkts. Wenn Sie die neueste Version des SDKs verwenden, muss die API nicht auf der Zulassungsliste des Schlüssels stehen.
Fehlerbehebung
Wie behebe ich den Fehler API_KEY_SERVICE_BLOCKED oder 403 Forbidden, der angibt, dass Anfragen an diese API blockiert sind?
Folgen Sie der Anleitung in diesen FAQs, wenn Sie einen API_KEY_SERVICE_BLOCKED-Fehler oder einen Fehler wie den folgenden erhalten:
Forbidden: 403 POST https://example-service.googleapis.com/method: Requests to this API example-service.googleapis.com method google.example-service.rest.method are blocked.
Auf den API-Schlüssel, den Ihre App zum Aufrufen der API verwendet, sind wahrscheinlich API-Einschränkungen angewendet und die API ist nicht in der Zulassungsliste des Schlüssels enthalten.
Wie kann ich diesen Fehler beheben? „Die Mess-ID dieser Firebase-App konnte nicht vom Server abgerufen werden.“
Für den von Ihrer Webanwendung verwendeten API-Schlüssel gelten wahrscheinlich API-Einschränkungen. Prüfen Sie in diesem Fall, ob die Firebase Management API in der Liste der zulässigen APIs aufgeführt ist.
Ich habe eine E-Mail oder einen Fehler erhalten, dass mein API-Schlüssel ungültig ist. Was ist passiert und wie kann ich das Problem beheben?
Hier sind einige der häufigsten Ursachen für ungültige API-Schlüssel:
Für den API-Schlüssel gelten API-Schlüsseleinschränkungen, die eine Übereinstimmung mit der App verhindern, die versucht, den Schlüssel zu verwenden („Anwendungseinschränkungen“), oder die den Schlüssel für die aufgerufene API unbrauchbar machen („API-Einschränkungen“).
Der API-Schlüssel wurde in der Google Cloud-Konsole aus dem Projekt gelöscht.
Der API-Schlüssel wurde nicht für die Projekt-ID erstellt, die in der Firebase-Konfigurationsdatei/dem Firebase-Objekt der App aufgeführt ist.