Łączenie aplikacji z emulatorem uwierzytelniania

Zanim użyjesz emulatora Authentication w aplikacji, upewnij się, że poznasz ogólny przepływ pracy w Firebase Local Emulator Suite, oraz musisz zainstalować i skonfigurować Local Emulator Suite i zapoznaj się z poleceniami interfejsu wiersza poleceń.

W tym temacie zakładamy, że wiesz już, jak programować Rozwiązania Firebase Authentication do produkcji. W razie potrzeby zapoznaj się z dokumentacją dla połączenia platformy i metody uwierzytelniania.

Co mogę zrobić za pomocą emulatora Authentication?

Emulator Authentication zapewnia wysokiej jakości lokalną emulator Firebase Authentication, udostępniając większość funkcji dostępnych w produkcyjne Firebase Authentication. Sparowane z platformami Apple, W pakietach SDK Firebase na Androida i w przeglądarce oraz emulatorze możesz:

  • tworzyć i aktualizować emulowane konta użytkowników do testowania adresów e-mail i haseł oraz nimi zarządzać; numer telefonu/SMS, wielopoziomowy dostęp do SMS-ów i tożsamość osób trzecich (np.Google). uwierzytelnianie dostawcy
  • Wyświetlanie i edytowanie emulowanych użytkowników
  • Prototypowe systemy uwierzytelniania tokenami niestandardowymi
  • Sprawdź komunikaty związane z uwierzytelnianiem na karcie Logi interfejsu emulatora.

Wybierz projekt Firebase

Funkcja Firebase Local Emulator Suite emuluje produkty z jednego projektu Firebase.

Aby wybrać projekt do użycia, przed uruchomieniem emulatorów uruchom interfejs wiersza poleceń firebase use w katalogu roboczym. Możesz też przejść flagę --project poszczególnych emulatorów .

Local Emulator Suite obsługuje emulację prawdziwych projektów Firebase oraz projektów demograficznych.

Typ projektu Funkcje Używanie z emulatorami
Prawdziwe

Prawdziwy projekt Firebase to projekt utworzony i skonfigurowany przez Ciebie (najprawdopodobniej za pomocą konsoli Firebase).

Prawdziwe projekty mają aktywne zasoby, takie jak instancje baz danych, miejsce na dane zasobników, funkcji lub innych zasobów utworzonych dla danej usługi Firebase w projektach AI.

Podczas pracy z prawdziwymi projektami Firebase możesz używać emulatorów dla lub wszystkich obsługiwanych usług.

W przypadku usług, których nie emulujesz, aplikacje i kod będą interakcja z zasobem aktywnym (instancją bazy danych, pamięcią masową) zasobnik, funkcja itp.).

Wersja demonstracyjna

Projekt demonstracyjny Firebase nie ma rzeczywistej konfiguracji Firebase oraz brak aktywnych zasobów. Dostęp do tych projektów uzyskuje się zazwyczaj w ramach ćwiczeń z programowania lub innych samouczków.

Identyfikatory projektów demonstracyjnych mają prefiks demo-.

Podczas pracy z projektami demonstracyjnymi Firebase Twoje aplikacje i kod współdziałają tylko emulatory. Jeśli aplikacja próbuje wchodzić w interakcję z zasobem w przypadku których emulator nie jest uruchomiony, kod ten zakończy się niepowodzeniem.

Zalecamy, aby w miarę możliwości korzystać z projektów demonstracyjnych. W ten sposób możesz zapewnić im dostęp do tych korzyści:

  • Łatwiejsza konfiguracja, ponieważ emulatory można uruchamiać bez konieczności tworzenia Projekt Firebase
  • Silniejsze bezpieczeństwo, ponieważ jeśli Twój kod przypadkowo wywoła nieemulowany (produkcyjnych), nie jest prawdopodobne, że nastąpi zmiana danych, jego użycia i rozliczeń
  • lepsza obsługa offline, ponieważ nie trzeba łączyć się z internetem, pobierz konfigurację pakietu SDK.
.

Dostosuj aplikację, aby komunikować się z emulatorem

Pakiety SDK na Androida, iOS i aplikacje internetowe

Skonfiguruj konfigurację w aplikacji lub sprawdź zajęcia, aby korzystać z Emulator Authentication w ten sposób.

Kotlin+KTX
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)

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

Nie jest wymagana dodatkowa konfiguracja do tworzenia prototypów i testowania interakcji między Authentication i Cloud Functions lub Firebase Security Rules za Cloud Firestore lub Realtime Database. Gdy emulator Authentication jest skonfigurowany, a inne emulatory uruchomione, automatycznie ze sobą współdziałają.

Admin SDK s

Urządzenia Firebase Admin SDK automatycznie łączą się z emulatorem Authentication, gdy Ustawiono zmienną środowiskową FIREBASE_AUTH_EMULATOR_HOST.

export FIREBASE_AUTH_EMULATOR_HOST="127.0.0.1:9099"

Pamiętaj, że emulator Cloud Functions automatycznie wykrywa z emulatorem Authentication, możesz więc pominąć ten krok podczas testowania integracji między Emulatory Cloud Functions i Authentication. Zmienna środowiskowa zostanie jest automatycznie ustawiany dla Admin SDK w Cloud Functions.

Po ustawieniu zmiennej środowiskowej Firebase Admin SDK akceptuje niepodpisany identyfikator tokeny i pliki cookie sesji wydawane przez emulator Authentication (przez verifyIdToken); i createSessionCookie), które ułatwiają lokalne programowanie i testowanie. Pamiętaj, by nie ustawiać zmiennej środowiskowej w środowisku produkcyjnym.

Jeśli chcesz, aby kod Admin SDK łączył się ze współdzielonym emulatorem działającym w w innym środowisku, musisz podać ten sam identyfikator projektu, który ustawiasz za pomocą interfejsu wiersza poleceń Firebase. Możesz przekazać identyfikator projektu do: initializeApp. bezpośrednio lub ustaw zmienną środowiskową GCLOUD_PROJECT.

Pakiet SDK administratora Node.js
admin.initializeApp({ projectId: "your-project-id" });
Zmienna środowiskowa
export GCLOUD_PROJECT="your-project-id"

Tokeny identyfikatorów

Ze względów bezpieczeństwa emulator Authentication generuje niepodpisane tokeny tożsamości, które są akceptowane tylko przez inne emulatory Firebase lub pakiet SDK Firebase Admin, gdy skonfigurowanej. Te tokeny zostaną odrzucone przez wersję produkcyjną Usługi Firebase lub pakiet Firebase Admin SDK działający w trybie produkcyjnym (np. zachowanie domyślne bez czynności opisanych powyżej).

Uruchom emulator

Emulatora Authentication możesz używać interaktywnie za pomocą interfejsu Emulator Suite UI i nieinteraktywnie za pomocą lokalnego interfejsu REST. Poniżej omawiają przypadki użycia zarówno interaktywne, jak i nieinteraktywne.

Aby uruchomić emulator Authentication, jego interfejs REST oraz Emulator Suite UI, wykonaj:

firebase emulators:start

W przypadku uwierzytelniania anonimowego aplikacja może korzystać z logiki logowania platforma (iOS, Android, sieć).

W przypadku uwierzytelniania za pomocą poczty e-mail i hasła możesz rozpocząć prototyp, dodając do emulatora Authentication z Twojej aplikacji przy użyciu metod pakietu Authentication w pakiecie SDK, lub za pomocą funkcji Emulator Suite UI.

  1. W Emulator Suite UI kliknij kartę Authentication (Uwierzytelnianie).
  2. Kliknij przycisk Dodaj użytkownika.
  3. Postępuj zgodnie z instrukcjami tworzenia konta użytkownika, wypełniając uwierzytelnianie poczty e-mail. .

Po utworzeniu użytkownika testowego Twoja aplikacja może logować użytkownika i wylogowywać się z niego za pomocą pakietu SDK na Twojej platformie (iOS, Android sieć).

Aby przetestować weryfikację adresu e-mail lub logowanie się za pomocą linków w e-mailach, emulator wyświetla URL w terminalu, na którym został wykonany firebase emulators:start.

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-key

Wklej link w przeglądarce, aby przeprowadzić symulację zdarzenia weryfikacji, a następnie sprawdź, czy weryfikacja się powiodła.

{
  "authEmulator": {
    "success": "The email has been successfully verified.",
    "email": "customer@example.com"
  }
}

Aby przetestować resetowanie hasła, emulator wyświetla podobny URL, zawierający ciąg parametr newPassword (który w razie potrzeby możesz zmienić) do terminala.

http://127.0.0.1:9099/emulator/action?mode=resetPassword&oobCode=XYZ!23&apiKey=fake-api-key&newPassword=YOUR_NEW_PASSWORD

Testy nieinteraktywne

Zamiast używać funkcji Emulator Suite UI lub kodu klienta do zarządzania e-mailami i hasłami kont użytkowników, możesz napisać testowe skrypty konfiguracji, które wywołują interfejsy API typu REST w celu tworzenia i usuwać konta użytkowników oraz pobierać kody weryfikacyjne spoza zakresu adresów e-mail do wypełnienia. adres URL do weryfikacji adresu e-mail emulatora. Pozwala to oddzielić platformę od kodu testowego i pozwala testować reklamy bez interakcji.

W przypadku nieinteraktywnych procesów testowania poczty e-mail i haseł typową w takiej kolejności.

  1. Utwórz użytkowników za pomocą punktu końcowego REST rejestracji Authentication.
  2. Loguj użytkowników przy użyciu adresów e-mail i haseł w celu przeprowadzenia testów.
  3. Pobierz dostępny zewnętrzny adres e-mail do weryfikacji (jeśli ma to zastosowanie w przypadku testów) z punktu końcowego REST specyficznego dla emulatora.
  4. Usuń rekordy użytkownika z punktem końcowym REST specyficznym dla emulatora, aby wyczyścić dane.

Emulowane uwierzytelnianie przez telefon/SMS-y

W przypadku uwierzytelniania przez telefon emulator uwierzytelniania nie obsługuje:

  • Przepływy reCAPTCHA i APN. Po skonfigurowaniu interakcji z emulatorem Pakiety SDK wyłączają te metody weryfikacji w sposób podobny do opisanego w przypadku testowanie integracji (iOS, Android sieć).
  • Przetestuj numery telefonów z kodami skonfigurowanymi wstępnie w konsoli Firebase.

W przypadku kodu klienta proces uwierzytelniania przez telefon/SMS identyczne jak w przypadku wersji produkcyjnej (iOS, Android, internet).

Za pomocą Emulator Suite UI:

  1. W Emulator Suite UI kliknij kartę Authentication (Uwierzytelnianie).
  2. Kliknij przycisk Dodaj użytkownika.
  3. Postępuj zgodnie z instrukcjami tworzenia konta użytkownika, wypełniając uwierzytelnianie przez telefon. .

Jednak w przypadku procesów uwierzytelniania przez telefon emulator NIE aktywuje dostarczania. SMS-ów, ponieważ kontakt z operatorem jest poza zakresem i nie miejsce na testy lokalne! Zamiast tego emulator wyświetla kod, który zostały wysłane w wiadomości SMS do tego samego terminala, na którym uruchomiono polecenie firebase emulators:start; wprowadzanie tego kodu w aplikacji w celu symulacji użytkowników sprawdzania SMS-ów.

Testy nieinteraktywne

Do nieinteraktywnego testowania uwierzytelniania przez telefon użyj emulatora Authentication Interfejs API REST do pobierania dostępnych kodów SMS. Pamiętaj, że kod jest inny co podczas inicjowania filmu.

Typowa sekwencja wygląda tak.

  1. Zadzwoń na platformę signInWithPhoneNumber, aby rozpocząć proces weryfikacji.
  2. Pobierz kod weryfikacyjny za pomocą odpowiedniego punktu końcowego REST emulatora.
  3. Zadzwoń pod numer confirmationResult.confirm(code) jak zwykle i podaj kod weryfikacyjny.

Uwierzytelnianie wielopoziomowe przy użyciu SMS-ów

Emulator Authentication obsługuje prototypowanie i testowanie wielopoziomowego uwierzytelniania SMS. przepływów uwierzytelniania (MFA) dostępnych w wersji produkcyjnej na iOS, Androida oraz sieć.

Po dodaniu do emulatora przykładowego użytkownika można włączyć MFA i skonfigurować je lub więcej numerów telefonów, na które będą wysyłane wiadomości SMS drugiego składnika. Wiadomości są wysyłane do tego samego terminala, na którym uruchomiono firebase emulators:start, i dostępne w interfejsie REST.

Emulacja uwierzytelniania zewnętrznego dostawcy tożsamości

Emulator Authentication umożliwia testowanie wielu procesów uwierzytelniania innych firm w w aplikacjach na iOS, Androida i aplikacji internetowych bez wprowadzania zmian w kodzie produkcyjnym. Przykłady uwierzytelniania, zapoznaj się z dokumentacją, kombinacje dostawców i platform, których możesz używać w aplikacji.

Za pomocą pakietu SDK Firebase można uwierzytelnić się w jednym na dwa sposoby:

  • Aplikacja pozwala pakietowi SDK na kompleksowe obsługę całego procesu, w tym wszystkich interakcji z zewnętrznymi dostawcami tożsamości w celu pobierania danych logowania.
  • Aplikacja ręcznie pobiera dane logowania od zewnętrznego dostawcy za pomocą tego pakietu SDK innej firmy i przekazuje te dane logowania do pakietu SDK Authentication.

Zajrzyj do dokumentacji powyżej i upewnij się, że znasz w zależności od tego, który proces – zarządzane przez pakiet SDK Firebase czy ręczne pobieranie danych logowania – których użyć. Emulator Authentication obsługuje testowanie obu metod.

Testowanie przepływów dostawcy tożsamości opartych na pakiecie SDK Firebase

Jeśli Twoja aplikacja korzysta z dowolnego pełnego procesu pakietu SDK Firebase, takiego jak OAuthProvider, przy użyciu konta Microsoft, GitHub lub Yahoo do interaktywnego testowania Authentication udostępnia lokalną wersję odpowiedniej strony logowania, przetestować uwierzytelnianie z aplikacji internetowych, które wywołują signinWithPopup lub signInWithRedirect. Ta strona logowania obsługiwana lokalnie pojawia się też w: aplikacji mobilnych renderowanych przez bibliotekę WebView Twojej platformy.

W razie potrzeby emulator tworzy fałszywe konta użytkowników i dane logowania w miarę upływu czasu.

Testowanie przepływów dostawcy tożsamości z ręcznym pobieraniem danych logowania

Jeśli używasz opcji „ręcznie” technik logowania i wywołaj signInWithCredentials Twojej platformy aplikacja, jak zwykle, poprosi o prawdziwe zalogowanie innej firmy pobierania prawdziwych danych logowania do innych firm.

Pamiętaj, że emulator obsługuje tylko uwierzytelnianie signInWithCredential danych logowania pobieranych z Google Sign-In, Apple i innych dostawców, używaj tokenów identyfikatorów zaimplementowanych jako tokeny sieciowe JSON (JWT). Tokeny dostępu (np. udostępnione przez Facebooka czy Twittera, które nie są tokenami JWT), nie są obsługiwane. W następnej sekcji omawiamy alternatywy w takich przypadkach.

Testy nieinteraktywne

Jednym ze sposobów testowania nieinteraktywnych jest zautomatyzowanie kliknięć użytkowników podczas logowania. wyświetlanych przez emulator. W przypadku aplikacji internetowych użyj interfejsu sterującego, takiego jak WebDriver. W przypadku urządzeń mobilnych użyj narzędzi do testowania interfejsu, które są dostępne na Twojej platformie, np. Espresso. lub Xcode.

Możesz też zaktualizować swój kod, aby używać signInWithCredential (np. w gałęzi kodu) i użyj procesu uwierzytelniania tokenem z próbką Tokeny identyfikatorów dla kont zamiast prawdziwych danych logowania.

  1. Ponownie utwórz lub skomentuj część kodu, która pobiera tokeny idToken z dostawca tożsamości; Wyeliminuje to konieczność wpisywania prawdziwych nazw użytkownika i haseł testowania oraz pozwala na zwolnienie testów z limitów interfejsu API i limitów liczby żądań w IDP.
  2. Po drugie użyj literału JSON zamiast tokena dla signInWithCredential Używając np. internetowego pakietu SDK, możesz zmienić kod do:
firebase.auth().signInWithCredential(firebase.auth.GoogleAuthProvider.credential(
  '{"sub": "abc123", "email": "foo@example.com", "email_verified": true}'
));

W przypadku użycia z emulatorem ten kod służy do uwierzytelnienia użytkownika za pomocą adresu e-mail foo@example.com w Google. Potraktuj pole podrzędne jako klucz podstawowy, który można zmienić na dowolny ciąg, naśmiewając się z logowania różnych użytkowników. Dostępne opcje zastąp firebase.auth.GoogleAuthProvider na przykład new firebase.auth.OAuthProvider('yahoo.com') lub inny identyfikator dostawcy symulację.

Emulowane uwierzytelnianie tokenem niestandardowym

Emulator Authentication obsługuje uwierzytelnianie za pomocą niestandardowych tokenów sieciowych JSON za pomocą wywołań metody signInWithCustomToken na obsługiwanych platformach, zgodnie z opisem w dokumentacji produkcyjnej wersji Authentication.

Czym różni się emulator Authentication od wersji produkcyjnej

Emulator Firebase Authentication symuluje wiele funkcji wersji produkcyjnej usługi. Ponieważ jednak każdy system uwierzytelniania na wielu poziomach bezpieczeństwa (urządzenia, dostawcy zewnętrzni, Firebase, itp.), emulator ma problemy z prawidłowym odtworzeniem wszystkich przepływów.

Cloud IAM

Pakiet emulatorów Firebase nie próbuje replikować ani nie przestrzegać Zachowanie związane z uprawnieniami przy uruchamianiu. Emulatory są zgodne z zasadami zabezpieczeń Firebase Reguły są podane, ale w sytuacjach, gdy są one zwykle używane, na przykład do ustawienia wywoływania konta usługi przez Cloud Functions, a tym samym do ustawiania uprawnień, Nie można skonfigurować emulatora. Używa on dostępnego globalnie konta na komputerze programisty, podobnie jak w przypadku bezpośredniego uruchomienia skryptu.

Na platformach mobilnych logowanie się za pomocą linku przez e-maila opiera się na Linkach dynamicznych Firebase, wszystkie takie linki będą otwierane na platformie internetowej (mobilnej).

Logowanie przez inną usługę

W przypadku procesów logowania przez usługi zewnętrzne, Firebase Authentication korzysta z bezpiecznych danych logowania z usług zewnętrznych, takich jak Twitter czy GitHub.

Prawdziwe dane uwierzytelniające dostawców OpenID Connect, takich jak Google czy Apple, są akceptowana przez emulator Authentication. Dane logowania od dostawców niekorzystających z OpenID Connect nie są obsługiwane.

Logowanie się przez e-maila lub SMS-a

W aplikacjach w wersji produkcyjnej procesy logowania się przez e-maila i SMS-a są asynchroniczne operacja, w której użytkownik sprawdza odebraną wiadomość i wpisuje kod logowania do interfejsu logowania. Emulator Authentication nie wysyła e-maili ani SMS-ów wiadomości, ale jak opisano powyżej, generuje kody logowania i wyświetla je w terminalu i testowania.

Emulator nie obsługuje definiowania testowych numerów telefonów za pomocą funkcji poprawiono kody logowania, tak jak w konsoli Firebase.

Uwierzytelnianie tokenem niestandardowym

Emulator Authentication nie sprawdza podpisu ani wygaśnięcia uprawnień niestandardowych tokeny. Dzięki temu możesz używać ręcznie przygotowanych i ponownie używać tokenów w scenariuszach – prototypowania i testowania.

Ograniczanie liczby żądań / przeciwdziałanie nadużyciom

Emulator Authentication nie powiela szybkości produkcji i ograniczania szybkości produkcji lub zapobiegania nadużyciom funkcje zabezpieczeń.

Funkcje blokowania

W środowisku produkcyjnym użytkownicy są zapisywany w pamięci raz po wywołaniu beforeCreate zdarzeń i zdarzeń beforeSignIn. Jednak ze względu na ograniczenia techniczne emulator Authentication zapisuje dane w magazynie 2 razy: raz po utworzeniu użytkownika i a drugi po zalogowaniu. Oznacza to, że w przypadku nowych użytkowników możesz getAuth().getUser() w beforeSignIn w emulatorze Authentication, ale napotka błąd w wersji produkcyjnej.

Co dalej?