Bevor Sie den Authentifizierungsemulator mit Ihrer App verwenden, vergewissern Sie sich, dass Sie den gesamten Arbeitsablauf der Firebase Local Emulator Suite verstehen und dass Sie die Local Emulator Suite installieren und konfigurieren und ihre CLI-Befehle überprüfen .
In diesem Thema wird davon ausgegangen, dass Sie bereits mit der Entwicklung von Firebase-Authentifizierungslösungen für die Produktion vertraut sind. Sehen Sie sich bei Bedarf die Dokumentation für Ihre Kombination aus Plattform und Authentifizierungsverfahren an .
Was kann ich mit dem Authentifizierungsemulator tun?
Der Authentication-Emulator bietet eine lokale High-Fidelity-Emulation von Firebase-Authentifizierungsdiensten und stellt einen Großteil der Funktionen bereit, die in der Firebase-Authentifizierung in der Produktion zu finden sind. In Verbindung mit den Apple-Plattformen, Android und Web Firebase SDKs ermöglicht Ihnen der Emulator:
- Erstellen, aktualisieren und verwalten Sie emulierte Benutzerkonten zum Testen von E-Mail/Passwort, Telefonnummer/SMS, SMS-Multi-Faktor und Identitätsanbieter-Authentifizierung von Drittanbietern (z. B. Google).
- Emulierte Benutzer anzeigen und bearbeiten
- Erstellen Sie Prototypen für benutzerdefinierte Token-Authentifizierungssysteme
- Überprüfen Sie authentifizierungsbezogene Meldungen auf der Registerkarte Protokolle der Emulator-Benutzeroberfläche.
Wählen Sie ein Firebase-Projekt aus
Die Firebase Local Emulator Suite emuliert Produkte für ein einzelnes Firebase-Projekt.
Um das zu verwendende Projekt auszuwählen, bevor Sie die Emulatoren starten, führen Sie in der Befehlszeilenschnittstelle firebase use
in Ihrem Arbeitsverzeichnis aus. Oder Sie können das Flag --project
an jeden Emulatorbefehl übergeben.
Die Local Emulator Suite unterstützt die Emulation echter Firebase-Projekte und Demo- Projekte.
Projekttyp | Merkmale | Verwenden Sie mit Emulatoren |
---|---|---|
Real | Ein echtes Firebase-Projekt ist eines, das Sie erstellt und konfiguriert haben (höchstwahrscheinlich über die Firebase-Konsole). Echte Projekte haben Live-Ressourcen wie Datenbankinstanzen, Speicher-Buckets, Funktionen oder andere Ressourcen, die Sie für dieses Firebase-Projekt eingerichtet haben. | Wenn Sie mit echten Firebase-Projekten arbeiten, können Sie Emulatoren für einige oder alle unterstützten Produkte ausführen. Bei allen Produkten, die Sie nicht emulieren, interagieren Ihre Apps und Ihr Code mit der Live- Ressource (Datenbankinstanz, Speicher-Bucket, Funktion usw.). |
Demo | Ein Demo-Firebase-Projekt hat keine echte Firebase-Konfiguration und keine Live-Ressourcen. Auf diese Projekte wird normalerweise über Codelabs oder andere Tutorials zugegriffen. Projekt-IDs für Demo-Projekte haben das | Wenn Sie mit Firebase-Demoprojekten arbeiten, interagieren Ihre Apps und Ihr Code nur mit Emulatoren . Wenn Ihre App versucht, mit einer Ressource zu interagieren, für die kein Emulator ausgeführt wird, schlägt dieser Code fehl. |
Wir empfehlen Ihnen, möglichst Demoprojekte zu verwenden. Zu den Vorteilen gehören:
- Einfachere Einrichtung, da Sie die Emulatoren ausführen können, ohne jemals ein Firebase-Projekt zu erstellen
- Höhere Sicherheit, denn wenn Ihr Code versehentlich nicht emulierte (Produktions-)Ressourcen aufruft, besteht keine Chance auf Datenänderung, Nutzung und Abrechnung
- Besserer Offline-Support, da Sie nicht auf das Internet zugreifen müssen, um Ihre SDK-Konfiguration herunterzuladen.
Instrumentieren Sie Ihre App, um mit dem Emulator zu kommunizieren
Android-, iOS- und Web-SDKs
Richten Sie Ihre In-App-Konfiguration oder Testklassen für die Interaktion mit dem Authentifizierungsemulator wie folgt ein.
Kotlin+KTX
Firebase.auth.useEmulator("10.0.2.2", 9099)
Java
FirebaseAuth.getInstance().useEmulator("10.0.2.2", 9099);
Schnell
Auth.auth().useEmulator(withHost:"localhost", port:9099)
Web version 9
import { getAuth, connectAuthEmulator } from "firebase/auth"; const auth = getAuth(); connectAuthEmulator(auth, "http://localhost:9099");
Web version 8
const auth = firebase.auth(); auth.useEmulator("http://localhost:9099");
Es ist keine zusätzliche Einrichtung erforderlich, um Interaktionen zwischen Authentifizierung und Cloud-Funktionen oder Firebase-Sicherheitsregeln für Cloud Firestore oder Realtime Database zu prototypisieren und zu testen. Wenn der Authentifizierungsemulator konfiguriert ist und andere Emulatoren ausgeführt werden, arbeiten sie automatisch zusammen.
Admin-SDKs
Die Firebase Admin SDKs stellen automatisch eine Verbindung zum Authentifizierungsemulator her, wenn die Umgebungsvariable FIREBASE_AUTH_EMULATOR_HOST
festgelegt ist.
export FIREBASE_AUTH_EMULATOR_HOST="localhost:9099"
Beachten Sie, dass der Cloud Functions-Emulator den Authentication-Emulator automatisch erkennt, sodass Sie diesen Schritt überspringen können, wenn Sie Integrationen zwischen Cloud Functions- und Authentication-Emulatoren testen. Die Umgebungsvariable wird automatisch für das Admin SDK in Cloud Functions festgelegt.
Wenn die Umgebungsvariable festgelegt ist, akzeptieren Firebase Admin SDKs unsignierte ID-Token und Sitzungscookies, die vom Authentifizierungsemulator (über die Methoden verifyIdToken
bzw. createSessionCookie
) ausgegeben werden, um die lokale Entwicklung und das Testen zu erleichtern. Bitte stellen Sie sicher, dass Sie die Umgebungsvariable nicht in der Produktion setzen.
Wenn Sie möchten, dass Ihr Admin SDK-Code eine Verbindung zu einem freigegebenen Emulator herstellt, 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-Token
Aus Sicherheitsgründen gibt der Authentifizierungsemulator unsignierte ID-Token aus, die nur von anderen Firebase-Emulatoren oder dem Firebase Admin SDK akzeptiert werden, wenn sie konfiguriert sind . Diese Token werden von Firebase-Produktionsdiensten oder Firebase Admin SDK abgelehnt, die im Produktionsmodus ausgeführt werden (z. B. das Standardverhalten ohne die oben beschriebenen Einrichtungsschritte).
Starten Sie den Emulator
Sie können den Authentifizierungsemulator interaktiv über die Benutzeroberfläche der Emulator Suite und nicht interaktiv über seine lokale REST-Schnittstelle verwenden. Die folgenden Abschnitte behandeln interaktive und nicht interaktive Anwendungsfälle.
Führen Sie zum Starten des Authentifizierungsemulators, seiner REST-Schnittstelle und der Benutzeroberfläche der Emulator Suite Folgendes aus:
firebase emulators:start
Emulierte E-Mail, E-Mail-Link und anonyme Authentifizierung
Für die anonyme Authentifizierung kann Ihre App die Anmeldelogik für Ihre Plattform ( iOS , Android , Web ) anwenden.
Für die E-Mail-/Kennwortauthentifizierung können Sie mit dem Prototyping beginnen, indem Sie Benutzerkonten zum Authentifizierungsemulator aus Ihrer App hinzufügen, indem Sie Authentifizierungs-SDK-Methoden verwenden, oder indem Sie die Benutzeroberfläche der Emulator Suite verwenden.
- Klicken Sie in der Benutzeroberfläche der Emulator Suite auf die Registerkarte Authentifizierung .
- Klicken Sie auf die Schaltfläche Benutzer hinzufügen .
- Folgen Sie dem Assistenten zum Erstellen von Benutzerkonten und füllen Sie die E-Mail-Authentifizierungsfelder aus.
Wenn ein Testbenutzer erstellt wurde, kann Ihre App den Benutzer mit SDK-Logik für Ihre Plattform ( iOS , Android , Web ) an- und abmelden.
Zum Testen der E-Mail-Verifizierung/Anmeldung mit E-Mail-Link-Flows gibt der Emulator eine URL zu dem Terminal aus, auf dem firebase emulators:start
ausgeführt wurde.
i To verify the email address customer@ex.com, follow this link:
http://localhost:9099/emulator/action?mode=verifyEmail&lang=en&oobCode=XYZ123&apiKey=fake-api-key
Fügen Sie den Link in Ihren Browser ein, um das Überprüfungsereignis zu simulieren, und überprüfen Sie, ob die Überprüfung erfolgreich war.
{
"authEmulator": {
"success": "The email has been successfully verified.",
"email": "customer@example.com"
}
}
Zum Testen von Kennwortzurücksetzungen gibt der Emulator eine ähnliche URL, einschließlich eines newPassword- Parameters (den Sie bei Bedarf ändern können), an das Terminal aus.
http://localhost:9099/emulator/action?mode=resetPassword&oobCode=XYZ!23&apiKey=fake-api-key&newPassword=YOUR_NEW_PASSWORD
Nicht-interaktives Testen
Anstatt die Emulator Suite-Benutzeroberfläche oder den Client-Code zum Verwalten von E-Mail-/Passwort-Benutzerkonten zu verwenden, können Sie Test-Setup-Skripts schreiben, die REST-APIs aufrufen, um Benutzerkonten zu erstellen und zu löschen und Out-of-Band-E-Mail-Verifizierungscodes abzurufen, um die E-Mail-Verifizierung des Emulators zu füllen URL. Dadurch bleiben Plattform und Testcode getrennt und Sie können nicht interaktiv testen.
Für nicht-interaktive E-Mail- und Passwort-Testabläufe ist die typische Sequenz wie folgt.
- Erstellen Sie Benutzer mit dem REST-Endpunkt Authentication signUp .
- Melden Sie Benutzer mit den E-Mail-Adressen und Kennwörtern an, um Tests durchzuführen.
- Rufen Sie, falls für Ihre Tests zutreffend, verfügbare Out-of-Band-E-Mail-Bestätigungscodes vom emulatorspezifischen REST-Endpunkt ab.
- Leeren Sie Benutzerdatensätze mit dem emulatorspezifischen REST-Endpunkt zum Löschen von Daten.
Emulierte Telefon-/SMS-Authentifizierung
Für die Telefonauthentifizierung unterstützt der Auth-Emulator Folgendes nicht:
- reCAPTCHA- und APN-Flows. Nach der Konfiguration für die Interaktion mit dem Emulator deaktivieren Client-SDKs diese Überprüfungsmethoden auf ähnliche Weise wie für Integrationstests ( iOS , Android , Web ) beschrieben.
- Testen Sie Telefonnummern mit in der Firebase-Konsole vorkonfigurierten Codes.
Ansonsten ist der Telefon-/SMS-Authentifizierungsfluss in Bezug auf den Clientcode identisch mit dem für die Produktion ( iOS , Android , Web ) beschriebenen.
Verwenden der Benutzeroberfläche der Emulator Suite:
- Klicken Sie in der Benutzeroberfläche der Emulator Suite auf die Registerkarte Authentifizierung .
- Klicken Sie auf die Schaltfläche Benutzer hinzufügen .
- Folgen Sie dem Assistenten zum Erstellen von Benutzerkonten und füllen Sie die Felder für die Telefonauthentifizierung aus.
Bei telefonischen Authentifizierungsabläufen löst der Emulator jedoch KEINE Zustellung von Textnachrichten aus, da die Kontaktaufnahme mit einem Netzbetreiber außerhalb des Bereichs liegt und für lokale Tests nicht geeignet ist! Stattdessen druckt der Emulator den Code aus, der per SMS an dasselbe Terminal gesendet worden wäre, auf dem Sie firebase emulators:start
; Geben Sie diesen Code in die App ein, um Benutzer zu simulieren, die ihre Textnachrichten überprüfen.
Nicht-interaktives Testen
Verwenden Sie zum Testen der nicht interaktiven Telefonauthentifizierung die REST-API des Authentifizierungsemulators, um verfügbare SMS-Codes abzurufen. Beachten Sie, dass der Code jedes Mal anders ist, wenn Sie den Flow starten.
Die typische Reihenfolge ist wie folgt.
- Rufen Sie die Plattform
signInWithPhoneNumber
auf, um den Verifizierungsprozess zu starten. - Rufen Sie den Bestätigungscode mithilfe des emulatorspezifischen REST-Endpunkts ab.
- Rufen Sie also wie gewohnt mit dem Verifizierungscode
confirmationResult.confirm(code)
auf.
Multifaktor-SMS
Der Authentifizierungsemulator unterstützt das Prototyping und Testen der SMS-MFA-Flows (Multi-Factor Authentication), die in der Produktion für iOS , Android und Web verfügbar sind.
Wenn Sie dem Emulator einen Scheinbenutzer hinzufügen, können Sie MFA aktivieren und eine oder mehrere Telefonnummern konfigurieren, an die SMS-Nachrichten des zweiten Faktors 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 Identitätsanbieter (IDP)-Authentifizierung von Drittanbietern
Mit dem Authentifizierungsemulator 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 für verschiedene Kombinationen von Anbietern und Plattformen, die Sie in Ihrer App verwenden können .
Im Allgemeinen können Sie sich mit dem Firebase SDK auf zwei Arten authentifizieren:
- Ihre App lässt das SDK den gesamten End-to-End-Prozess abwickeln, einschließlich aller Interaktionen mit IDP-Drittanbietern zum Abrufen von Anmeldeinformationen.
- Ihre App ruft mithilfe des SDK dieses Anbieters Anmeldeinformationen manuell von einem Drittanbieter ab und leitet diese Anmeldeinformationen an das Authentifizierungs-SDK weiter.
Überprüfen Sie erneut den obigen Dokumentationslink und stellen Sie sicher, dass Sie mit dem Ablauf vertraut sind – vom Firebase SDK verwalteter vs. manueller Abruf von Anmeldeinformationen –, den Sie verwenden möchten. Der Authentifizierungsemulator unterstützt das Testen beider Ansätze.
Testen von Firebase SDK-gesteuerten IDP-Flows
Wenn Ihre App einen End-to-End-Flow des Firebase SDK verwendet, wie OAuthProvider
für die Anmeldung bei Microsoft, GitHub oder Yahoo, für interaktive Tests, stellt der Authentifizierungsemulator eine lokale Version der entsprechenden Anmeldeseite bereit, um Sie beim Testen zu unterstützen Authentifizierung von Web-Apps, die die Methode signinWithPopup
oder signInWithRedirect
aufrufen. Diese lokal bereitgestellte Anmeldeseite wird auch in mobilen Apps angezeigt, die von der Webansichtsbibliothek Ihrer Plattform gerendert werden.
Der Emulator erstellt nach Bedarf nachgebildete Benutzerkonten und Anmeldeinformationen von Drittanbietern, während die Flows fortschreiten.
Testen von IDP-Flows mit manuellem Abruf von Anmeldeinformationen
Wenn Sie „manuelle“ Anmeldetechniken verwenden und die signInWithCredentials
Methode Ihrer Plattform aufrufen, fordert Ihre App wie üblich eine echte Drittanbieter-Anmeldung an und ruft echte Drittanbieter-Anmeldeinformationen ab.
Beachten Sie, dass der Emulator nur die signInWithCredential
Authentifizierung für Anmeldeinformationen unterstützt, die von Google Sign-In, Apple und anderen Anbietern abgerufen werden, die ID-Token verwenden, die als JSON Web Tokens (JWTs) implementiert sind. Zugriffstoken (z. B. die von Facebook oder Twitter bereitgestellten, die keine JWTs sind) werden nicht unterstützt. Der nächste Abschnitt diskutiert eine Alternative in diesen Fällen.
Nicht-interaktives Testen
Ein Ansatz für nicht interaktives Testen besteht darin, Benutzerklicks auf der vom Emulator bereitgestellten Anmeldeseite zu automatisieren. Verwenden Sie für Web-Apps eine Steuerschnittstelle wie WebDriver. Verwenden Sie für Mobilgeräte die UI-Testtools Ihrer Plattform, z. B. Espresso oder Xcode.
Alternativ können Sie Ihren Code aktualisieren, um signInWithCredential
zu verwenden (z. B. in einer Codeverzweigung) und einen Token-Authentifizierungsfluss mit Schein-ID-Token für Konten anstelle von echten Anmeldeinformationen verwenden.
- Den Teil Ihres Codes, der idTokens vom IDP abruft, neu verdrahten oder auskommentieren; Dadurch müssen Sie während Ihrer Tests keine echten Benutzernamen und Passwörter eingeben und entlasten Ihre Tests von API-Kontingenten und Ratenbegrenzungen beim IDP.
- Verwenden Sie zweitens eine wörtliche JSON-Zeichenfolge anstelle des Tokens für
signInWithCredential
. Am Beispiel des Web-SDK können Sie den Code folgendermaßen ändern:
firebase.auth().signInWithCredential(firebase.auth.GoogleAuthProvider.credential(
'{"sub": "abc123", "email": "foo@example.com", "email_verified": true}'
));
Bei Verwendung mit dem Emulator authentifiziert dieser Code erfolgreich einen Benutzer mit der E-Mail-Adresse foo@example.com
bei Google. Stellen Sie sich das Unterfeld als Primärschlüssel vor, der in eine beliebige Zeichenfolge geändert werden kann, um die Anmeldung verschiedener Benutzer zu simulieren. Sie können firebase.auth.GoogleAuthProvider
beispielsweise durch new firebase.auth.OAuthProvider('yahoo.com')
oder jede andere Anbieter-ID ersetzen, die Sie verspotten möchten.
Emulierte benutzerdefinierte Token-Authentifizierung
Der Authentifizierungsemulator verarbeitet die Authentifizierung mit benutzerdefinierten JSON-Web-Tokens mithilfe von Aufrufen der signInWithCustomToken
Methode auf unterstützten Plattformen, wie in der Produktionsauthentifizierungsdokumentation beschrieben.
Wie sich der Authentifizierungsemulator von der Produktion unterscheidet
Der Firebase Authentication-Emulator simuliert viele Funktionen des Produktionsprodukts. Da jedoch jede Art von Authentifizierungssystem stark auf Sicherheit auf mehreren Ebenen angewiesen ist (Gerät, Drittanbieter, Firebase usw.), ist es für den Emulator schwierig, alle Flows ordnungsgemäß neu zu erstellen.
Cloud-IAM
Die Firebase Emulator Suite versucht nicht, IAM-bezogenes Verhalten für die Ausführung zu replizieren oder zu respektieren. Emulatoren halten sich an die bereitgestellten Firebase-Sicherheitsregeln, aber in Situationen, in denen IAM normalerweise verwendet würde, z. B. um Cloud-Funktionen zum Aufrufen von Dienstkonten und damit Berechtigungen festzulegen, ist der Emulator nicht konfigurierbar und verwendet das global verfügbare Konto auf Ihrem Entwicklercomputer. ähnlich wie beim direkten Ausführen eines lokalen Skripts.
Melden Sie sich über den E-Mail-Link auf dem Handy an
Da die E-Mail-Link-Anmeldung auf mobilen Plattformen auf Firebase Dynamic Links basiert, werden alle diese Links stattdessen auf der (mobilen) Webplattform geöffnet.
Anmeldung von Drittanbietern
Für Anmeldevorgänge von Drittanbietern stützt sich die Firebase-Authentifizierung auf sichere Anmeldeinformationen von Drittanbietern wie Twitter und Github.
Echte Anmeldeinformationen von OpenID Connect-Anbietern wie Google und Apple werden vom Authentifizierungsemulator akzeptiert. Anmeldeinformationen von Nicht-OpenID Connect-Anbietern werden nicht unterstützt.
E-Mail-/SMS-Anmeldung
In Produktions-Apps beinhalten E-Mail- und SMS-Anmeldeabläufe einen asynchronen Vorgang, bei dem der Benutzer eine empfangene Nachricht überprüft und einen Anmeldecode in eine Anmeldeschnittstelle eingibt. Der Authentifizierungsemulator sendet keine E-Mails oder SMS-Nachrichten, aber wie oben beschrieben, generiert er Anmeldecodes und gibt sie zum Testen an das Terminal aus.
Der Emulator unterstützt nicht die Möglichkeit, Testtelefonnummern mit festen Anmeldecodes zu definieren, wie dies mit der Firebase-Konsole möglich ist.
Benutzerdefinierte Token-Authentifizierung
Der Authentifizierungsemulator validiert nicht die Signatur oder den Ablauf von benutzerdefinierten Token. Auf diese Weise können Sie handgefertigte Token verwenden und Token unbegrenzt in Prototyping- und Testszenarien wiederverwenden.
Ratenbegrenzung / Anti-Missbrauch
Der Authentifizierungsemulator repliziert keine Produktionsratenbegrenzungs- oder Anti-Missbrauchsfunktionen.
Sperrfunktionen
In der Produktion werden Benutzer einmal in den Speicher geschrieben, nachdem sowohl das beforeCreate
als auch das beforeSignIn
-Ereignis ausgelöst wurden. Aufgrund technischer Einschränkungen schreibt der Authentifizierungsemulator jedoch zweimal in den Speicher, einmal nach der Benutzererstellung und ein weiteres Mal nach der Anmeldung. Das bedeutet, dass Sie für neue Benutzer getAuth().getUser()
erfolgreich in beforeSignIn
im Authentication-Emulator aufrufen können, aber in der Produktion würde dabei ein Fehler auftreten.
Was als nächstes?
Eine kuratierte Reihe von Videos und detaillierten Anleitungsbeispielen finden Sie in der Firebase Emulators Training Playlist .
Da ausgelöste Funktionen eine typische Integration mit der Authentifizierung sind, erfahren Sie mehr über den Cloud Functions for Firebase-Emulator unter Funktionen lokal ausführen .