Przejście z Google Identity Toolkit na Uwierzytelnianie Firebase

Najnowsza wersja Zestawu narzędzi Google Identity została udostępniona jako Uwierzytelnianie Firebase. W przyszłości nie będziemy już rozwijać Identity Toolkit, a wszystkie nowe funkcje będą dodawane do Uwierzytelniania Firebase. Zachęcamy deweloperów korzystających z Identity Toolkit do przejścia na Uwierzytelnianie Firebase, gdy tylko będzie to możliwe w przypadku ich aplikacji. Identity Toolkit nadal działa i nie zostanie wycofany bez wcześniejszego ogłoszenia.

Nowe funkcje

Uwierzytelnianie Firebase ma już kilka istotnych ulepszeń w porównaniu z Google Identity Toolkit:

  • Dostęp do wszystkich usług Firebase

    Firebase to platforma mobilna, dzięki której możesz szybko tworzyć wysokiej jakości aplikacje, zwiększać grono użytkowników i zarabiać więcej pieniędzy. Firebase składa się z uzupełniających się funkcji, które możesz dowolnie łączyć, aby dopasować je do swoich potrzeb. Obejmuje infrastrukturę do: analityki mobilnej, komunikacji w chmurze, bazy danych w czasie rzeczywistym, przechowywania plików, hostingu statycznego, zdalnej konfiguracji, raportowania awarii na urządzeniach mobilnych i testowania na Androidzie.

  • Zaktualizowane interfejsy

    Całkowicie przebudowaliśmy procesy interfejsu użytkownika na podstawie najnowszych badań UX Google. Obejmuje to odzyskiwanie hasła, łączenie kont oraz procesy rozróżniania nowych i istniejących kont, których kodowanie i debugowanie często zajmuje dużo czasu. Jest on zintegrowany z Smart Lockiem na hasła na Androidzie, który znacznie zwiększył współczynnik konwersji logowania i rejestracji w aplikacjach biorących udział w programie. Umożliwia też łatwe modyfikowanie motywów, aby dopasować je do aplikacji. W celu zapewnienia maksymalnej możliwości dostosowania udostępniliśmy wersje AndroidiOS na licencji open source.

  • Uproszczona konfiguracja serwera

    Ułatwiliśmy deweloperom korzystanie z uwierzytelniania Firebase. W przypadku Identity Toolkit zauważyliśmy, że wielu deweloperów nie wdrażało procesu odzyskiwania adresu e-mail, co uniemożliwiało użytkownikom odzyskanie konta, jeśli zapomnieli hasła. Usługa Uwierzytelnianie Firebase może wysyłać do użytkowników e-maile z prośbą o weryfikację adresu e-mail, zresetowanie hasła lub zmianę hasła. Tekst tych e-maili można łatwo dostosować do potrzeb użytkowników. Dodatkowo nie musisz już hostować widżetów interfejsu do hostowania przekierowań i przeprowadzania operacji zmiany hasła.

  • Nowa konsola administracyjna

    Firebase ma nową konsolę programisty, a sekcja Uwierzytelnianie umożliwia wyświetlanie, modyfikowanie i usuwanie użytkowników. Może to być bardzo pomocne przy debugowaniu procesów logowania i rejestracji. Konsola umożliwia też konfigurowanie metod uwierzytelniania i dostosowywanie szablonów e-maili.

  • Nowe pakiety SDK

    Wszystkie interfejsy API serwera Identity Toolkit są teraz dostępne natywnie w każdej z naszych bibliotek klienta (Android, iOS, internet). Deweloperzy będą mogli logować i rejestrować starych i nowych użytkowników, uzyskiwać dostęp do właściwości użytkownika, łączyć, aktualizować i usuwać konta, resetować hasła i wykonywać inne czynności bez konieczności korzystania z ustalonego interfejsu. Jeśli wolisz, możesz ręcznie utworzyć cały proces logowania i powiązane z nim funkcje na podstawie tego interfejsu API.

  • Zarządzanie sesjami w aplikacjach mobilnych

    W przypadku Identity Toolkit aplikacje tworzyły własny stan sesji na podstawie początkowego zdarzenia uwierzytelniania z Identity Toolkit. Firebase Auth korzysta z usługi backendu, która pobiera token odświeżania wygenerowany na podstawie zdarzenia uwierzytelniania i wymienia go na godzinne tokeny dostępu dla Androida, iOS i JavaScriptu. Gdy użytkownik zmieni hasło, tokeny odświeżania nie będą już mogły generować nowych tokenów dostępu, co spowoduje wyłączenie dostępu do momentu ponownego uwierzytelnienia użytkownika na tym urządzeniu.

  • Uwierzytelnianie anonimowe i przez GitHub

    Usługa Uwierzytelnianie Firebase obsługuje 2 nowe typy uwierzytelniania: GitHub i anonimowe. Anonimowe logowanie umożliwia utworzenie unikalnego identyfikatora użytkownika bez konieczności przechodzenia przez proces logowania lub rejestracji. W przypadku anonimowego użytkownika możesz teraz wykonywać uwierzytelnione wywołania interfejsu API, tak jak w przypadku zwykłego użytkownika. Gdy użytkownik zdecyduje się zarejestrować konto, cała aktywność zostanie zachowana z tym samym identyfikatorem użytkownika. Jest to przydatne w przypadku koszyka po stronie serwera lub dowolnej aplikacji, w której chcesz zaangażować użytkownika przed wysłaniem go do procesu rejestracji.

Różnice w funkcjach

Niektóre funkcje Identity Toolkit nie są obecnie dostępne w usłudze Firebase Authentication, a inne zostały przeprojektowane i działają inaczej. Jeśli te funkcje są ważne dla Twojej aplikacji, możesz nie przeprowadzać migracji od razu. W wielu przypadkach te funkcje mogą nie być ważne dla Twojej aplikacji lub mogą istnieć proste rozwiązania zastępcze, które umożliwią Ci przeprowadzenie migracji.

Różnice po stronie serwera

Podstawowa usługa Identity Toolkit wraz z bazowymi interfejsami API typu REST, logiką weryfikacji konta i główną bazą danych użytkowników przeszła tylko drobne aktualizacje. Niektóre funkcje i sposób integrowania Uwierzytelniania Firebase z usługą uległy jednak zmianie.

  • Dostawcy tożsamości

    Usługi PayPal i AOL nie są obsługiwane. Użytkownicy z kontami od tych dostawców tożsamości nadal mogą logować się w Twojej aplikacji za pomocą procesu odzyskiwania hasła i ustawiać hasło do swojego konta.

  • Biblioteki serwera

    Obecnie dostępne są pakiety Admin SDK Firebase w językach Java, Node.js, Python, Go i C#.

  • E-maile dotyczące zarządzania kontem

    Resetowanie hasła, weryfikacja adresu e-mail i zmiana adresu e-mail mogą być przeprowadzane przez Firebase lub z serwera poczty dewelopera. Obecnie szablony e-maili Firebase oferują tylko ograniczoną możliwość dostosowywania.

  • Potwierdzenie zmiany adresu e-mail

    Gdy użytkownik zdecyduje się zmienić adres e-mail w Identity Toolkit, na nowy adres zostanie wysłany e-mail z linkiem umożliwiającym kontynuowanie procesu zmiany adresu e-mail.

    Firebase potwierdza zmianę adresu e-mail, wysyłając na stary adres e-mail wiadomość z linkiem do cofnięcia zmiany.

  • Wdrażanie platformy IDP

    Identity Toolkit umożliwiał stopniowe dodawanie dostawców tożsamości do systemu logowania, dzięki czemu można było eksperymentować z wpływem na zgłoszenia do pomocy. Ta funkcja została usunięta z usługi Uwierzytelnianie Firebase.

Różnice po stronie klienta

W Firebase funkcje udostępniane przez zestaw narzędzi Google Identity są podzielone na 2 komponenty:

  • Pakiety SDK uwierzytelniania Firebase

    W Uwierzytelnianiu Firebase funkcje udostępniane przez interfejs REST API Identity Toolkit zostały spakowane w pakiety SDK klienta dostępne na Androida, iOS i JavaScript. Za pomocą pakietu SDK możesz logować i rejestrować użytkowników, uzyskiwać dostęp do informacji o profilu użytkownika, łączyć, aktualizować i usuwać konta oraz resetować hasła za pomocą pakietu SDK klienta zamiast komunikować się z usługą backendową za pomocą wywołań REST.

  • Uwierzytelnianie FirebaseUI

    Wszystkie procesy interfejsu, które zarządzają logowaniem, rejestracją, odzyskiwaniem hasła i łączeniem kont, zostały przebudowane przy użyciu pakietów SDK usługi Uwierzytelnianie Firebase. Są one dostępne jako pakiety SDK open source na iOS i Androida, dzięki czemu możesz w pełni dostosowywać procesy w sposób niedostępny w przypadku Identity Toolkit.

Dodatkowe różnice:

  • Sesje i migracja

    Sesje są zarządzane inaczej w Identity Toolkit i Firebase Authentication, więc po uaktualnieniu pakietu SDK istniejące sesje użytkowników zostaną zakończone i będą oni musieli zalogować się ponownie.

Zanim zaczniesz

Zanim przejdziesz z Identity Toolkit na uwierzytelnianie Firebase, musisz

  1. Otwórz konsolę Firebase, kliknij Importuj projekt Google i wybierz projekt Identity Toolkit.

  2. Kliknij  > Uprawnienia, aby otworzyć stronę IAM i administracja.

  3. Otwórz Konta usługi. Tutaj możesz zobaczyć konto usługi, które zostało wcześniej skonfigurowane na potrzeby Identity Toolkit.

  4. Obok konta usługi kliknij > Utwórz klucz. Następnie w oknie Tworzenie klucza prywatnego ustaw typ klucza na JSON i kliknij Utwórz. Pobierz plik JSON zawierający dane logowania konta usługi. Będzie on potrzebny do zainicjowania pakietu SDK w następnym kroku.

  5. Wróć do konsoli Firebase. W sekcji Uwierzytelnianie otwórz stronę Szablony e-maili. Na tej stronie dostosuj szablony e-maili aplikacji.

    W Identity Toolkit, gdy użytkownicy resetowali hasła, zmieniali adresy e-mail i weryfikowali je, musieli pobrać kod OOB z serwera Identity Toolkit, a następnie wysłać go do użytkowników e-mailem. Firebase wysyła e-maile na podstawie skonfigurowanych przez Ciebie szablonów bez konieczności wykonywania dodatkowych działań.

  6. Opcjonalnie: jeśli chcesz mieć dostęp do usług Firebase na serwerze, zainstaluj pakiet SDK Firebase.

    1. Moduł Firebase Node.js możesz zainstalować za pomocą polecenia npm:

      $ npm init
      $ npm install --save firebase-admin
      
    2. W kodzie możesz uzyskać dostęp do Firebase za pomocą tego kodu:

      var admin = require('firebase-admin');
      var app = admin.initializeApp({
        credential: admin.credential.cert('path/to/serviceAccountCredentials.json')
      });
      

Następnie wykonaj czynności związane z migracją na platformie aplikacji: Android, iOS, sieć.

Serwery i JavaScript

Ważne zmiany

W implementacji internetowej Firebase występuje kilka dodatkowych różnic w porównaniu z Identity Toolkit.

  • Zarządzanie sesjami internetowymi

    Wcześniej, gdy użytkownik przeprowadzał uwierzytelnianie za pomocą widżetu Identity Toolkit, ustawiany był plik cookie, który służył do inicjowania sesji. Ten plik cookie miał dwutygodniowy okres ważności i umożliwiał użytkownikowi korzystanie z widżetu do zarządzania kontem w celu zmiany hasła i adresu e-mail. Niektóre witryny używały tego pliku cookie do uwierzytelniania wszystkich innych żądań stron w witrynie. Inne witryny używały tego pliku cookie do tworzenia własnych plików cookie za pomocą systemu zarządzania plikami cookie w swoich strukturach.

    Pakiety SDK klienta Firebase zarządzają teraz tokenami identyfikacyjnymi Firebase i współpracują z backendem Uwierzytelniania Firebase, aby utrzymywać sesję w aktualnym stanie. Backend wygasza sesje, gdy na koncie nastąpią ważne zmiany (np. zmiana hasła użytkownika). Tokeny identyfikacyjne Firebase nie są automatycznie ustawiane jako pliki cookie w kliencie internetowym i mają tylko godzinę ważności. Jeśli nie chcesz, aby sesje trwały tylko godzinę, tokeny tożsamości Firebase nie nadają się do używania jako pliki cookie do weryfikowania wszystkich żądań stron. Zamiast tego musisz skonfigurować odbiornik, który będzie reagować na logowanie się użytkownika, pobrać token identyfikacyjny Firebase, sprawdzić jego ważność i utworzyć własny plik cookie za pomocą systemu zarządzania plikami cookie w swoim frameworku.

    Musisz ustawić czas trwania sesji pliku cookie na podstawie potrzeb aplikacji w zakresie bezpieczeństwa.

  • Proces logowania w internecie

    Wcześniej, gdy użytkownik rozpoczynał proces logowania, był przekierowywany na stronę accountchooser.com, aby wybrać identyfikator, którego chce użyć. Proces Firebase Auth UI rozpoczyna się teraz od listy metod logowania, w tym opcji e-mail, która w przypadku internetu prowadzi do accountchooser.com, a na Androidzie korzysta z interfejsu HintRequest API. Dodatkowo adresy e-mail nie są już wymagane w interfejsie Firebase. Ułatwi to obsługę anonimowych użytkowników, użytkowników z niestandardowym uwierzytelnianiem lub użytkowników od dostawców, w przypadku których adresy e-mail nie są wymagane.

  • Widżet zarządzania kontem

    Ten widżet udostępnia interfejs użytkownika, w którym użytkownicy mogą zmieniać adresy e-mail, hasła lub odłączać konta od dostawców tożsamości. Jest ona obecnie w trakcie opracowywania.

  • Przycisk lub widżet logowania

    Widżety, takie jak przycisk logowania i karta użytkownika, nie są już dostępne. Można je bardzo łatwo tworzyć za pomocą interfejsu Firebase Authentication API.

  • Brak signOutUrl

    Musisz zadzwonić pod numer firebase.auth.signOut() i odebrać połączenie zwrotne.

  • Brak oobActionUrl

    Wysyłanie e-maili jest teraz obsługiwane przez Firebase i konfigurowane w konsoli Firebase.

  • Dostosowywanie CSS

    FirebaseUI korzysta ze stylów Material Design Lite, które dynamicznie dodają animacje Material Design.

Krok 1. Zmień kod serwera

  1. Jeśli serwer korzysta z tokena Identity Toolkit (ważnego przez 2 tygodnie) do zarządzania sesjami użytkowników w internecie, musisz przekonwertować serwer, aby używał własnego pliku cookie sesji.

    1. Zaimplementuj punkt końcowy do weryfikacji tokena identyfikatora Firebase i ustawiania pliku cookie sesji dla użytkownika. Aplikacja kliencka wysyła do tego punktu końcowego token identyfikatora Firebase.
    2. Jeśli przychodzące żądanie zawiera Twój własny plik cookie sesji, możesz uznać użytkownika za uwierzytelnionego. W przeciwnym razie traktuj żądanie jako nieuwierzytelnione.
    3. Jeśli nie chcesz, aby użytkownicy utracili istniejące sesje logowania, poczekaj 2 tygodnie, aż wygasną wszystkie tokeny Identity Toolkit, lub przeprowadź weryfikację podwójnych tokenów w aplikacji internetowej, jak opisano poniżej w kroku 3.
  2. Następnie, ponieważ tokeny Firebase różnią się od tokenów Identity Toolkit, musisz zaktualizować logikę weryfikacji tokenów. Zainstaluj na serwerze pakiet Firebase Server SDK. Jeśli używasz języka nieobsługiwanego przez ten pakiet, pobierz bibliotekę do weryfikacji tokenów JWT w swoim środowisku i prawidłowo zweryfikuj token.

  3. Po wprowadzeniu powyższych zmian możesz nadal mieć ścieżki kodu, które korzystają z tokenów Identity Toolkit. Jeśli masz aplikacje na iOS lub Androida, użytkownicy będą musieli zaktualizować je do nowej wersji, aby nowe ścieżki kodu działały. Jeśli nie chcesz zmuszać użytkowników do aktualizowania aplikacji, możesz dodać dodatkową logikę weryfikacji serwera, która sprawdza token i określa, czy do jego weryfikacji należy użyć pakietu Firebase SDK czy pakietu Identity Toolkit SDK. Jeśli masz tylko aplikację internetową, wszystkie nowe żądania uwierzytelniania zostaną przeniesione do Firebase, więc musisz używać tylko metod weryfikacji tokena Firebase.

Zapoznaj się z dokumentacją interfejsu Firebase Web API.

Krok 2. Zaktualizuj kod HTML

  1. Dodaj do aplikacji kod inicjalizacji Firebase:

    1. Otwórz projekt w konsoli Firebase.
    2. Na stronie Przegląd kliknij Dodaj aplikację, a potem Dodaj Firebase do aplikacji internetowej. Wyświetli się fragment kodu, który inicjuje Firebase.
    3. Skopiuj fragment kodu inicjującego i wklej go na stronę internetową.
  2. Dodaj do aplikacji FirebaseUI Auth:

    <script src="https://www.gstatic.com/firebasejs/ui/live/0.4/firebase-ui-auth.js"></script>
    <link type="text/css" rel="stylesheet" href="https://www.gstatic.com/firebasejs/ui/live/0.4/firebase-ui-auth.css" />
    <!-- *******************************************************************************************
       * TODO(DEVELOPER): Paste the initialization snippet from:
       * Firebase Console > Overview > Add Firebase to your web app. *
       ***************************************************************************************** -->
    <script type="text/javascript">
      // FirebaseUI config.
      var uiConfig = {
        'signInSuccessUrl': '<url-to-redirect-to-on-success>',
        'signInOptions': [
          // Leave the lines as is for the providers you want to offer your users.
          firebase.auth.GoogleAuthProvider.PROVIDER_ID,
          firebase.auth.FacebookAuthProvider.PROVIDER_ID,
          firebase.auth.TwitterAuthProvider.PROVIDER_ID,
          firebase.auth.GithubAuthProvider.PROVIDER_ID,
          firebase.auth.EmailAuthProvider.PROVIDER_ID
        ],
        // Terms of service url.
        'tosUrl': '<your-tos-url>',
      };
    
      // Initialize the FirebaseUI Widget using Firebase.
      var ui = new firebaseui.auth.AuthUI(firebase.auth());
      // The start method will wait until the DOM is loaded.
      ui.start('#firebaseui-auth-container', uiConfig);
    </script>
    
  3. Usuń z aplikacji pakiet SDK Identity Toolkit.

  4. Jeśli do zarządzania sesjami używasz tokena identyfikatora Identity Toolkit, musisz wprowadzić te zmiany po stronie klienta:

    1. Po zalogowaniu się w Firebase uzyskaj token identyfikacyjny Firebase, wywołując funkcję firebase.auth().currentUser.getToken().

    2. Wyślij token identyfikatora Firebase na serwer backendu, zweryfikuj go i wydaj własny plik cookie sesji.

      Nie polegaj wyłącznie na pliku cookie sesji podczas wykonywania operacji wymagających zachowania poufności lub wysyłania do serwera uwierzytelnionych żądań edycji. Musisz zapewnić dodatkową ochronę przed fałszowaniem żądań z innych witryn (CSRF).

      Jeśli Twój framework nie zapewnia ochrony przed CSRF, jednym ze sposobów zapobiegania atakom jest uzyskanie tokena identyfikatora Firebase dla zalogowanego użytkownika za pomocą getToken() i dołączanie go do każdego żądania (domyślnie wysyłany jest też plik cookie sesji). Następnie musisz zweryfikować ten token za pomocą pakietu SDK serwera Firebase, a także sprawdzić plik cookie sesji, co zostało już wykonane przez platformę backendu. Utrudni to przeprowadzenie ataków CSRF, ponieważ token identyfikacyjny Firebase jest przechowywany tylko w pamięci internetowej, a nigdy w pliku cookie.

    3. Tokeny Identity Toolkit są ważne przez 2 tygodnie. Możesz nadal wydawać tokeny, które wygasają po 2 tygodniach, lub wydłużyć lub skrócić ten okres w zależności od wymagań dotyczących bezpieczeństwa aplikacji. Gdy użytkownik się wyloguje, wyczyść plik cookie sesji.

Krok 3. Zaktualizuj adresy URL przekierowania dostawcy tożsamości

  1. W konsoli Firebase otwórz sekcję Uwierzytelnianie i kliknij kartę Metoda logowania.

  2. W przypadku każdego obsługiwanego dostawcy logowania federacyjnego wykonaj te czynności:

    1. Kliknij nazwę dostawcy logowania.
    2. Skopiuj identyfikator URI przekierowania OAuth.
    3. W konsoli dewelopera dostawcy logowania zaktualizuj identyfikator URI przekierowania OAuth.

Android

Krok 1. Dodaj Firebase do aplikacji

  1. Otwórz konsolę Firebase i wybierz zaimportowany już projekt Identity Toolkit.

  2. Na stronie Przegląd kliknij Dodaj aplikację, a potem Dodaj Firebase do aplikacji na Androida. W oknie dialogowym Dodaj Firebase podaj nazwę pakietu aplikacji i odcisk certyfikatu podpisu, a następnie kliknij Dodaj aplikację. Plik konfiguracji google-services.json zostanie pobrany na Twój komputer.

  3. Skopiuj plik konfiguracyjny do głównego katalogu modułu aplikacji na Androida. Ten plik konfiguracyjny zawiera informacje o projekcie i kliencie Google OAuth.

  4. W pliku build.gradle na poziomie projektu (<var>your-project</var>/build.gradle) podaj nazwę pakietu aplikacji w sekcji defaultConfig:

    defaultConfig {
       …..
      applicationId "com.your-app"
    }
    
  5. W pliku build.gradle na poziomie projektu dodaj też zależność, aby uwzględnić wtyczkę google-services:

    buildscript {
     dependencies {
       // Add this line
       classpath 'com.google.gms:google-services:3.0.0'
     }
    }
    
  6. W pliku build.gradle na poziomie aplikacji<var>my-project</var>/<var>app-module</var>/build.gradle dodaj na dole ten wiersz, aby włączyć wtyczkę google-services:

    // Add to the bottom of the file
    apply plugin: 'com.google.gms.google-services'
    

    Wtyczka usług Google używa pliku google-services.json do konfigurowania aplikacji pod kątem korzystania z Firebase.

  7. W pliku build.gradle na poziomie aplikacji dodaj też zależność Uwierzytelnianie Firebase:

    compile 'com.google.firebase:firebase-auth:24.0.1'
    compile 'com.google.android.gms:play-services-auth:21.4.0'
    

Krok 2. Usuń pakiet Identity Toolkit SDK

  1. Usuń konfigurację Identity Toolkit z pliku AndroidManifest.xml. Te informacje są zawarte w pliku google-service.json i wczytywane przez wtyczkę google-services.
  2. Usuń z aplikacji pakiet SDK Identity Toolkit.

Krok 3. Dodaj FirebaseUI do aplikacji

  1. Dodaj do aplikacji FirebaseUI Auth.

  2. W aplikacji zastąp wywołania pakietu SDK Identity Toolkit wywołaniami FirebaseUI.

iOS

Krok 1. Dodaj Firebase do aplikacji

  1. Aby dodać pakiet SDK Firebase do aplikacji, uruchom te polecenia:

    $ cd your-project directory
    $ pod init
    $ pod 'Firebase'
    
  2. Otwórz konsolę Firebase i wybierz zaimportowany już projekt Identity Toolkit.

  3. Na stronie Przegląd kliknij Dodaj aplikację, a potem Dodaj Firebase do aplikacji na iOS. W oknie dialogowym Dodaj Firebase podaj identyfikator pakietu i identyfikator App Store, a następnie kliknij Dodaj aplikację. Na komputer zostanie pobrany plik konfiguracyjny GoogleService-Info.plist. Jeśli w projekcie masz wiele identyfikatorów pakietu, każdy z nich musi być połączony w konsoli Firebase, aby mógł mieć własny plik GoogleService-Info.plist.

  4. Skopiuj plik konfiguracyjny do katalogu głównego projektu Xcode i dodaj go do wszystkich elementów docelowych.

Krok 2. Usuń pakiet Identity Toolkit SDK

  1. Usuń GoogleIdentityToolkit z pliku Podfile aplikacji.
  2. Uruchom polecenie pod install.

Krok 3. Dodaj FirebaseUI do aplikacji

  1. Dodaj do aplikacji FirebaseUI Auth.

  2. W aplikacji zastąp wywołania pakietu SDK Identity Toolkit wywołaniami FirebaseUI.