Bevor Sie den Authentication-Emulator mit Ihrer Anwendung verwenden, sollten Sie sich mit dem allgemeinen Firebase Local Emulator Suite-Workflow vertraut machen. Außerdem müssen Sie die Local Emulator Suite installieren und konfigurieren und die zugehörigen CLI-Befehle prüfen.
In diesem Thema wird davon ausgegangen, dass Sie bereits mit der Entwicklung von Firebase Authentication-Lösungen für die Produktion vertraut sind. Lesen Sie bei Bedarf die Dokumentation für Ihre Kombination aus Plattform und Authentifizierungstechnik.
Was kann ich mit dem Authentication-Emulator tun?
Der Authentication-Emulator bietet eine hochpräzise lokale Emulation von Firebase Authentication-Diensten und stellt einen Großteil der Funktionen bereit, die in der Produktionsumgebung von Firebase Authentication verfügbar sind. In Kombination mit den Firebase SDKs für Apple-Plattformen, Android und das Web können Sie mit dem Emulator Folgendes tun:
- Emulierte Nutzerkonten erstellen, aktualisieren und verwalten, um die Authentifizierung per E-Mail/Passwort, Telefonnummer/SMS, SMS-Multi-Faktor und externem Identitätsanbieter (z.B. Google) zu testen
- Emulierte Nutzer ansehen und bearbeiten
- Prototypen für benutzerdefinierte Tokenauthentifizierungssysteme erstellen
- Prüfen Sie auf dem Tab „Logs“ der Emulator-UI, ob Nachrichten zur Authentifizierung vorhanden sind.
Firebase-Projekt auswählen
Die Firebase Local Emulator Suite emuliert Produkte für ein einzelnes Firebase-Projekt.
Wenn Sie das zu verwendende Projekt auswählen möchten, führen Sie vor dem Starten der Emulatoren in der Befehlszeile firebase use in Ihrem Arbeitsverzeichnis aus. Alternativ können Sie das Flag --project an jeden Emulatorbefehl übergeben.
Local Emulator Suite unterstützt die Emulation von echten Firebase-Projekten und Demo-Projekten.
| Projekttyp | Funktionen | Mit Emulatoren verwenden |
|---|---|---|
| Real |
Ein echtes Firebase-Projekt ist ein von Ihnen erstelltes und konfiguriertes Projekt (höchstwahrscheinlich über die Firebase Console). Echte Projekte haben Live-Ressourcen wie Datenbankinstanzen, Storage-Buckets, Funktionen oder andere Ressourcen, die Sie für dieses Firebase-Projekt einrichten. |
Wenn Sie mit echten Firebase-Projekten arbeiten, können Sie Emulatoren für alle oder einige der unterstützten Produkte ausführen. Bei allen Produkten, die Sie nicht emulieren, interagieren Ihre Anwendungen und Ihr Code mit der Live-Ressource (Datenbankinstanz, Storage-Bucket, Funktion usw.). |
| Demo |
Ein Firebase-Demoprojekt hat keine echte Firebase-Konfiguration und keine Live-Ressourcen. Auf diese Projekte wird in der Regel über Codelabs oder andere Tutorials zugegriffen. Projekt-IDs für Demoprojekte haben das Präfix |
Wenn Sie mit Firebase-Demoprojekten arbeiten, interagieren Ihre Apps und Ihr Code nur mit Emulatoren. Wenn Ihre Anwendung versucht, mit einer Ressource zu interagieren, für die kein Emulator ausgeführt wird, schlägt dieser Code fehl. |
Wir empfehlen, nach Möglichkeit Demoprojekte zu verwenden. Die wichtigsten Vorteile:
- Einfachere Einrichtung, da Sie die Emulatoren ausführen können, ohne ein Firebase-Projekt erstellen zu müssen
- Höhere Sicherheit, da bei versehentlichem Aufruf nicht emulierter (Produktions-)Ressourcen durch Ihren Code keine Datenänderung, Nutzung und Abrechnung möglich ist
- Bessere Offlineunterstützung, da kein Internetzugriff erforderlich ist, um Ihre SDK-Konfiguration herunterzuladen.
Anwendung für die Kommunikation mit dem Emulator instrumentieren
SDKs für Android, iOS und das Web
Richten Sie Ihre In-App-Konfiguration oder Testklassen so ein, dass sie mit dem Authentication-Emulator interagieren.
Kotlin
Firebase.auth.useEmulator("10.0.2.2", 9099)
Java
FirebaseAuth.getInstance().useEmulator("10.0.2.2", 9099);
Swift
Auth.auth().useEmulator(withHost:"127.0.0.1", port:9099)
Einheit
FirebaseAuth auth = FirebaseAuth.DefaultInstance; // Connects to the Auth Emulator running on port 9099 auth.UseEmulator("127.0.0.1", 9099);
Web
import { getAuth, connectAuthEmulator } from "firebase/auth"; const auth = getAuth(); connectAuthEmulator(auth, "http://127.0.0.1:9099");
Web
const auth = firebase.auth(); auth.useEmulator("http://127.0.0.1:9099");
Es ist keine zusätzliche Einrichtung erforderlich, um Interaktionen zwischen Authentication und Cloud Functions oder Firebase Security Rules für Cloud Firestore oder Realtime Database zu prototypisieren und zu testen. Wenn der Authentication-Emulator konfiguriert ist und andere Emulatoren ausgeführt werden, arbeiten sie automatisch zusammen.
Admin SDK Sek.
Die Firebase Admin SDKs stellen automatisch eine Verbindung zum Authentication-Emulator her, wenn die Umgebungsvariable FIREBASE_AUTH_EMULATOR_HOST festgelegt ist.
export FIREBASE_AUTH_EMULATOR_HOST="127.0.0.1:9099"
Der Cloud Functions-Emulator erkennt den Authentication-Emulator automatisch. Sie können diesen Schritt also überspringen, wenn Sie Integrationen zwischen Cloud Functions- und Authentication-Emulatoren testen. Die Umgebungsvariable wird automatisch für Admin SDK in Cloud Functions festgelegt.
Wenn die Umgebungsvariable festgelegt ist, akzeptiert Firebase Admin SDKs nicht signierte ID-Tokens und Sitzungscookies, die vom Authentication-Emulator (über die Methoden verifyIdToken bzw. createSessionCookie) ausgestellt wurden, um die lokale Entwicklung und Tests zu erleichtern. Achten Sie darauf, die Umgebungsvariable nicht in der Produktion festzulegen.
Wenn Sie Ihren Admin SDK-Code mit einem freigegebenen Emulator verbinden möchten, der in einer anderen Umgebung ausgeführt wird, müssen Sie dieselbe Projekt-ID angeben, die Sie mit der Firebase CLI festgelegt haben. Sie können eine Projekt-ID direkt an initializeApp übergeben oder die Umgebungsvariable GCLOUD_PROJECT festlegen.
Node.js Admin SDK
admin.initializeApp({ projectId: "your-project-id" });
Umgebungsvariable
export GCLOUD_PROJECT="your-project-id"
ID-Tokens
Aus Sicherheitsgründen gibt der Authentication-Emulator unsignierte ID-Tokens aus, die nur von anderen Firebase-Emulatoren oder dem Firebase Admin SDK akzeptiert werden, wenn es konfiguriert ist. Diese Tokens werden von Firebase-Produktionsdiensten oder dem Firebase Admin SDK im Produktionsmodus abgelehnt (z.B. das Standardverhalten ohne die oben beschriebenen Einrichtungsschritte).
Emulator starten
Sie können den Authentication-Emulator interaktiv über die Emulator Suite UI und nicht interaktiv über die lokale REST-Schnittstelle verwenden. In den folgenden Abschnitten werden interaktive und nicht interaktive Anwendungsfälle behandelt.
Führen Sie Folgendes aus, um den Authentication-Emulator, seine REST-Schnittstelle und die Emulator Suite UI zu starten:
firebase emulators:start
Emulierte E‑Mail-Authentifizierung, E‑Mail-Link-Authentifizierung und anonyme Authentifizierung
Für die anonyme Authentifizierung kann Ihre App die Anmeldelogik für Ihre Plattform (iOS, Android, Web) ausführen.
Für die E-Mail-/Passwort-Authentifizierung können Sie mit dem Prototyping beginnen, indem Sie dem Authentication-Emulator über Ihre App mithilfe von Authentication-SDK-Methoden oder mithilfe der Emulator Suite UI Nutzerkonten hinzufügen.
- Klicken Sie im Emulator Suite UI auf den Tab Authentifizierung.
- Klicken Sie auf Nutzer hinzufügen.
- Folgen Sie dem Assistenten zum Erstellen von Nutzerkonten und füllen Sie die Felder für die E-Mail-Authentifizierung aus.
Nachdem Sie einen Testnutzer erstellt haben, kann Ihre App den Nutzer mit der SDK-Logik für Ihre Plattform (iOS, Android, Web) an- und abmelden.
Zum Testen der E‑Mail-Bestätigung und der Anmeldung mit E‑Mail-Link gibt der Emulator eine URL im Terminal aus, in dem firebase emulators:start ausgeführt wurde.
i To verify the email address customer@ex.com, follow this link:
http://127.0.0.1:9099/emulator/action?mode=verifyEmail&lang=en&oobCode=XYZ123&apiKey=fake-api-keyFügen Sie den Link in Ihren Browser ein, um das Bestätigungsereignis zu simulieren, und prüfen Sie, ob die Bestätigung erfolgreich war.
{
"authEmulator": {
"success": "The email has been successfully verified.",
"email": "customer@example.com"
}
}
Zum Testen von Passwortzurücksetzungen gibt der Emulator eine ähnliche URL aus, einschließlich eines newPassword-Parameters (den Sie nach Bedarf ändern können).
http://127.0.0.1:9099/emulator/action?mode=resetPassword&oobCode=XYZ!23&apiKey=fake-api-key&newPassword=YOUR_NEW_PASSWORDNicht interaktive Tests
Anstatt die Emulator Suite UI oder den Clientcode zum Verwalten von E-Mail-/Passwort-Nutzerkonten zu verwenden, können Sie Test-Setupscripts schreiben, die REST APIs aufrufen, um Nutzerkonten zu erstellen und zu löschen und Out-of-Band-E-Mail-Bestätigungscodes abzurufen, um die E-Mail-Bestätigungs-URL des Emulators zu füllen. So bleiben Plattform- und Testcode getrennt und Sie können nicht interaktiv testen.
Bei nicht interaktiven Testabläufen mit E-Mail-Adresse und Passwort sieht die typische Abfolge so aus:
- Erstellen Sie Nutzer mit dem REST-Endpunkt „signUp“ von Authentication.
- Melden Sie Nutzer mit den E-Mail-Adressen und Passwörtern an, um Tests durchzuführen.
- Falls für Ihre Tests relevant, rufen Sie verfügbare Out-of-Band-E-Mail-Bestätigungscodes vom emulatorspezifischen REST-Endpunkt ab.
- Löschen Sie Nutzerdatensätze mit dem emulatorspezifischen REST-Endpunkt zum Löschen von Daten.
Emulierte Telefon-/SMS-Authentifizierung
Für die Authentifizierung per Smartphone unterstützt der Auth-Emulator Folgendes nicht:
- reCAPTCHA- und APN-Abläufe. Sobald die Client-SDKs für die Interaktion mit dem Emulator konfiguriert sind, deaktivieren sie diese Bestätigungsmethoden auf ähnliche Weise wie für Integrationstests beschrieben (iOS, Android, Web).
- Testtelefonnummern mit Codes, die in der Firebase-Konsole vorkonfiguriert sind.
Ansonsten ist der Authentifizierungsablauf per Telefon/SMS in Bezug auf den Clientcode mit dem für die Produktion beschriebenen Ablauf identisch (iOS, Android, Web).
Mit dem Emulator Suite UI:
- Klicken Sie im Emulator Suite UI auf den Tab Authentifizierung.
- Klicken Sie auf Nutzer hinzufügen.
- Folgen Sie dem Assistenten zum Erstellen von Nutzerkonten und füllen Sie die Felder für die Telefonauthentifizierung aus.
Bei der Telefonauthentifizierung löst der Emulator jedoch KEINE Zustellung von Nachrichten aus, da die Kontaktaufnahme mit einem Mobilfunkanbieter nicht möglich ist und sich nicht für lokale Tests eignet. Stattdessen gibt der Emulator den Code aus, der per SMS an dasselbe Terminal gesendet worden wäre, auf dem Sie firebase emulators:start ausgeführt haben. Geben Sie diesen Code in die App ein, um zu simulieren, dass Nutzer ihre Nachrichten abrufen.
Nicht interaktive Tests
Verwenden Sie für nicht interaktive Tests der Telefonauthentifizierung die REST API des Authentication-Emulators, um verfügbare SMS-Codes abzurufen. Der Code ist bei jedem Start des Ablaufs anders.
Der typische Ablauf sieht so aus:
- Rufen Sie die Plattform
signInWithPhoneNumberauf, um den Bestätigungsprozess zu starten. - Rufen Sie den Bestätigungscode über den emulatorspezifischen REST-Endpunkt ab.
- Rufen Sie
confirmationResult.confirm(code)wie gewohnt mit dem Bestätigungscode an.
Multi-Faktor-Authentifizierung per SMS
Der Authentication-Emulator unterstützt das Prototyping und Testen der SMS-Multi-Faktor-Authentifizierungsabläufe (MFA), die in der Produktion für iOS, Android und das Web verfügbar sind.
Wenn Sie dem Emulator einen simulierten Nutzer hinzufügen, können Sie die Multi-Faktor-Authentifizierung aktivieren und eine oder mehrere Telefonnummern konfigurieren, an die SMS-Nachrichten für den zweiten Faktor gesendet werden. Nachrichten werden an dasselbe Terminal ausgegeben, auf dem Sie firebase emulators:start ausgeführt haben, und sind über die REST-Schnittstelle verfügbar.
Emulierte Authentifizierung über einen externen Identitätsanbieter (IDP)
Mit dem Authentication-Emulator können Sie viele Authentifizierungsabläufe von Drittanbietern in Ihren iOS-, Android- oder Web-Apps testen, ohne Änderungen am Produktionscode vorzunehmen. Beispiele für Authentifizierungsabläufe finden Sie in der Dokumentation zu den verschiedenen Kombinationen von Anbietern und Plattformen, die Sie in Ihrer Anwendung verwenden können.
Im Allgemeinen können Sie das Firebase SDK auf zwei Arten für die Authentifizierung verwenden:
- Ihre App überlässt dem SDK die gesamte Abwicklung, einschließlich aller Interaktionen mit Drittanbieter-IDPs zum Abrufen von Anmeldedaten.
- Ihre App ruft Anmeldedaten manuell von einem Drittanbieter ab, indem sie das SDK dieses Anbieters verwendet, und übergibt diese Anmeldedaten an das Authentication SDK.
Sehen Sie sich noch einmal den oben genannten Dokumentationslink an und machen Sie sich mit dem Ablauf vertraut, den Sie verwenden möchten – Firebase SDK-verwaltet oder manueller Abruf von Anmeldedaten. Der Authentication-Emulator unterstützt das Testen beider Ansätze.
Firebase SDK-gesteuerte IDP-Abläufe testen
Wenn Ihre App einen End-to-End-Ablauf des Firebase SDK verwendet, z. B. OAuthProvider für die Anmeldung mit Microsoft, GitHub oder Yahoo, stellt der Authentication-Emulator für interaktive Tests eine lokale Version der entsprechenden Anmeldeseite bereit. So können Sie die Authentifizierung von Web-Apps testen, die die Methode signinWithPopup oder signInWithRedirect aufrufen. Diese lokal bereitgestellte Anmeldeseite wird auch in mobilen Apps angezeigt, die von der Webview-Bibliothek Ihrer Plattform gerendert werden.
Der Emulator erstellt im Verlauf der Abläufe nach Bedarf simulierte Drittanbieter-Nutzerkonten und ‑Anmeldedaten.
IDP-Abläufe mit manuellem Abruf von Anmeldedaten testen
Wenn du „manuelle“ Anmeldetechniken verwendest und die Methode signInWithCredentials deiner Plattform aufrufst, fordert deine App wie gewohnt eine echte Drittanbieteranmeldung an und ruft echte Drittanbieteranmeldedaten ab.
Der Emulator unterstützt nur die signInWithCredential-Authentifizierung für Anmeldedaten, die von Google Log-in, Apple und anderen Anbietern abgerufen werden, die ID-Tokens verwenden, die als JSON Web Tokens (JWTs) implementiert sind. Zugriffstokens (z.B. von Facebook oder Twitter, die keine JWTs sind) werden nicht unterstützt. Im nächsten Abschnitt wird eine Alternative für diese Fälle erläutert.
Nicht interaktive Tests
Ein Ansatz für nicht interaktive Tests besteht darin, Nutzerklicks auf der vom Emulator bereitgestellten Anmeldeseite zu automatisieren. Verwenden Sie für Web-Apps eine Steuerungsoberfläche wie WebDriver. Verwenden Sie für Mobilgeräte die UI-Testtools Ihrer Plattform, z. B. Espresso oder Xcode.
Alternativ können Sie Ihren Code so aktualisieren, dass signInWithCredential verwendet wird (z.B. in einem Code-Branch), und einen Token-Authentifizierungsablauf mit simulierten ID-Tokens für Konten anstelle von echten Anmeldedaten verwenden.
- Verknüpfen Sie den Teil Ihres Codes, der idTokens vom IDP abruft, neu oder kommentieren Sie ihn aus. Dadurch müssen Sie bei Ihren Tests keine echten Nutzernamen und Passwörter eingeben und Ihre Tests sind nicht an API-Kontingente und Ratenbegrenzungen beim IDP gebunden.
- Zweitens: Verwenden Sie anstelle des Tokens für
signInWithCredentialeinen literalen JSON-String. Am Beispiel des Web-SDK können Sie den Code so ändern:
firebase.auth().signInWithCredential(firebase.auth.GoogleAuthProvider.credential(
'{"sub": "abc123", "email": "foo@example.com", "email_verified": true}'
));
Wenn dieser Code mit dem Emulator verwendet wird, wird ein Nutzer mit der E-Mail-Adresse foo@example.com erfolgreich bei Google authentifiziert. Das Feld „sub“ ist ein Primärschlüssel, der in einen beliebigen String geändert werden kann, um die Anmeldung verschiedener Nutzer zu simulieren. Sie können firebase.auth.GoogleAuthProvider beispielsweise durch new firebase.auth.OAuthProvider('yahoo.com') oder eine andere Anbieter-ID ersetzen, die Sie simulieren möchten.
Emulierte Authentifizierung mit benutzerdefiniertem Token
Der Authentication-Emulator verarbeitet die Authentifizierung mit benutzerdefinierten JSON Web Tokens mithilfe von Aufrufen der Methode signInWithCustomToken auf unterstützten Plattformen, wie in der Authentication-Produktionsdokumentation beschrieben.
Unterschiede zwischen dem Authentication-Emulator und der Produktion
Der Firebase-Authentication-Emulator simuliert viele Funktionen des Produktionsprodukts. Da jedoch jede Art von Authentifizierungssystem stark von der Sicherheit auf mehreren Ebenen (Gerät, Drittanbieter, Firebase usw.) abhängt, ist es für den Emulator schwierig, alle Abläufe ordnungsgemäß nachzubilden.
Cloud IAM
Die Firebase Emulator Suite versucht nicht, IAM-bezogenes Verhalten für die Ausführung zu replizieren oder zu berücksichtigen. Emulatoren halten sich an die bereitgestellten Firebase-Sicherheitsregeln. In Situationen, in denen normalerweise IAM verwendet wird, z. B. zum Festlegen des Dienstkontos für den Aufruf von Cloud Functions und damit der Berechtigungen, ist der Emulator jedoch nicht konfigurierbar und verwendet das global verfügbare Konto auf Ihrer Entwicklungsmaschine, ähnlich wie beim direkten Ausführen eines lokalen Skripts.
Anmeldung über E-Mail-Link auf Mobilgeräten
Da die Anmeldung per E‑Mail-Link auf mobilen Plattformen auf Firebase Dynamic Links basiert, werden alle diese Links stattdessen auf der (mobilen) Webplattform geöffnet.
Anmeldung über Drittanbieter
Bei der Anmeldung durch einen Drittanbieter verwendet Firebase Authentication sichere Sicherheitsanmeldedaten von Drittanbietern wie Twitter und GitHub.
Echte Anmeldedaten von OpenID Connect-Anbietern wie Google und Apple werden vom Authentication-Emulator akzeptiert. Anmeldedaten von Nicht-OpenID Connect-Anbietern werden nicht unterstützt.
Anmeldung per E-Mail/SMS
In Produktions-Apps umfassen die Anmeldevorgänge per E‑Mail und SMS einen asynchronen Vorgang, bei dem der Nutzer eine empfangene Nachricht prüft und einen Anmeldecode in eine Anmeldeoberfläche eingibt. Der Authentication-Emulator sendet keine E-Mails oder SMS, generiert aber wie oben beschrieben Anmeldecodes und gibt sie im Terminal aus, damit sie beim Testen verwendet werden können.
Der Emulator unterstützt nicht die Möglichkeit, Testtelefonnummern mit festen Anmeldecodes zu definieren, wie es mit der Firebase-Konsole möglich ist.
Authentifizierung mit benutzerdefiniertem Token
Der Authentication-Emulator validiert nicht die Signatur oder den Ablauf von benutzerdefinierten Tokens. So können Sie handgefertigte Tokens verwenden und Tokens in Prototyping- und Testszenarien unbegrenzt wiederverwenden.
Ratenbegrenzung/Missbrauchsschutz
Der Authentication-Emulator repliziert keine Funktionen zur Ratenbegrenzung oder zum Schutz vor Missbrauch in der Produktion.
Blockierfunktionen
In der Produktion werden Nutzer einmal in den Speicher geschrieben, nachdem sowohl das Ereignis beforeCreate als auch das Ereignis beforeSignIn ausgelöst wurde. Aufgrund technischer Einschränkungen schreibt der Authentication-Emulator jedoch zweimal in den Speicher: einmal nach der Nutzererstellung und einmal nach der Anmeldung. Das bedeutet, dass Sie für neue Nutzer getAuth().getUser() in beforeSignIn im Authentication-Emulator erfolgreich aufrufen können, in der Produktion jedoch ein Fehler auftritt.
Nächste Schritte
Eine Auswahl an Videos und detaillierte Anleitungen finden Sie in der Playlist „Firebase Emulators Training“.
Da ausgelöste Funktionen eine typische Integration mit Authentication sind, finden Sie weitere Informationen zum Cloud Functions for Firebase-Emulator unter Funktionen lokal ausführen.