Przejście z Google Identity Toolkit na Uwierzytelnianie Firebase

Najnowsza wersja zestawu narzędzi Google Identity została wydana jako Uwierzytelnianie Firebase. W przyszłości praca nad funkcjami w Identity Toolkit zostanie wstrzymana, a wszystkie nowe funkcje będą rozwijane w Uwierzytelnianiu Firebase. Zachęcamy deweloperów korzystających z Identity Toolkit do przejścia na Uwierzytelnianie Firebase, gdy tylko będzie to możliwe w ich aplikacjach. Jednak Identity Toolkit nadal działa i nie zostanie wycofany bez wcześniejszego ogłoszenia.

Nowe funkcje

Usługa Uwierzytelnianie Firebase zawiera już kilka znaczących ulepszeń w porównaniu z Google Identity Toolkit:

  • Dostęp do wszystkich funkcji Firebase

    Firebase to platforma mobilna, która pomaga Ci 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 łączyć i dopasowywać do swoich potrzeb. Obejmuje ono infrastrukturę do: analizy na urządzeniach mobilnych, komunikacji w chmurze, bazy danych w czasie rzeczywistym, przechowywania plików, hostowania statycznych, zdalnej konfiguracji, raportowania o awariach na urządzeniach mobilnych oraz testowania na urządzeniach z Androidem.

  • Zaktualizowane interfejsy użytkownika

    Całkowicie przebudowaliśmy przepływy interfejsu na podstawie najnowszych badań UX Google. Obejmuje to odzyskiwanie hasła, łączenie kont oraz nowe i dotychczasowe procesy rozstrzygania wątpliwości dotyczących kont, które często wymagają sporo czasu na kodowanie i debugowanie. Integruje Smart Lock na hasła na Androidzie, co znacznie poprawiło konwersje z logowania i rejestracji w przypadku aplikacji, które się do niego kwalifikują. Umożliwia też łatwe modyfikowanie motywów, aby dopasować je do aplikacji. Aby zapewnić maksymalną możliwość dostosowywania, udostępniliśmy wersje na Android i iOS w formie open source.

  • Uproszczona konfiguracja serwera

    Ułatwiliśmy deweloperom korzystanie z usługi uwierzytelniania Firebase. W przypadku narzędzia Identity Toolkit zauważyliśmy, że wielu deweloperów nie wdrożyło procesu odzyskiwania konta za pomocą adresu e-mail, co uniemożliwiło użytkownikom odzyskanie kont w przypadku zapomnienia hasła. Usługa Uwierzytelnianie Firebase może wysyłać użytkownikom e-maile z weryfikacją, prośbą o zresetowanie hasła i informacjami o zmienionym haśle. Teksty tych wiadomości można łatwo dostosowywać do swoich użytkowników. Nie musisz też już hostować widżetów interfejsu użytkownika do przekierowywania i wypełniania operacji zmiany hasła.

  • Nowa konsola administracyjna

    Firebase ma nową konsolę dla deweloperów, a sekcja uwierzytelniania umożliwia wyświetlanie, modyfikowanie i usuwanie użytkowników. Może to być bardzo pomocne podczas debugowania procesów logowania i rejestracji. W konsoli możesz też konfigurować metody uwierzytelniania i dostosowywać szablony 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ć się i rejestrować nowych i starych użytkowników, uzyskiwać dostęp do właściwości użytkownika, łączyć i aktualizować konta oraz usuwać je, resetować hasła i wykonywać inne czynności bez konieczności korzystania z niezmiennego interfejsu. Jeśli wolisz, możesz ręcznie stworzyć cały proces logowania i przekazać go do tego interfejsu API.

  • Zarządzanie sesjami w aplikacjach mobilnych

    W ramach Identity Toolkit aplikacje tworzyły własny stan sesji na podstawie zdarzenia początkowego uwierzytelniania z Identity Toolkit. Firebase Auth używa usługi zaplecza, która pobiera token odświeżania wygenerowany na podstawie zdarzenia uwierzytelniania i zamienia go na tokeny dostępu o czasie ważności 1 godziny na Androida, iOS i JavaScript. 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 czasu, aż użytkownik ponownie uwierzytelni się na tym urządzeniu.

  • Uwierzytelnianie anonimowe i przez GitHub

    Usługa Uwierzytelnianie Firebase obsługuje 2 nowe typy uwierzytelniania: GitHub i anonimowy. Logowanie anonimowe może służyć do tworzenia unikalnego identyfikatora użytkownika bez konieczności przechodzenia przez proces logowania lub rejestracji. Dzięki anonimowemu użytkownikowi możesz teraz wykonywać uwierzytelnione wywołania interfejsu API tak samo jak w przypadku zwykłego użytkownika. Gdy użytkownik zarejestruje się na konto, wszystkie jego działania będą rejestrowane przy użyciu tego samego identyfikatora użytkownika. Jest to przydatne w takich sytuacjach jak koszyk na serwerze czy aplikacja, w której chcesz zaangażować użytkownika, zanim prześlesz go do procesu rejestracji.

Różnice w funkcjach

Niektóre funkcje Identity Toolkit są obecnie niedostępne w 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ć łatwe rozwiązania alternatywne, które umożliwią Ci przeprowadzenie migracji.

Różnice po stronie serwera

Główna usługa Identity Toolkit wraz z podstawowymi interfejsami API REST, logiką walidacji kont i bazą danych o głównych użytkownikach przeszła tylko drobne zmiany. Zmieniły się jednak niektóre funkcje i sposób, w jaki integrujesz Uwierztelnianie Firebase ze swoją usługą.

  • Dostawcy tożsamości

    Paypal i AOL nie są obsługiwane. Użytkownicy, którzy mają konta w tych usługach uwierzytelniania, nadal mogą logować się w Twojej aplikacji za pomocą procesu odzyskiwania hasła i ustawić 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

    Wiadomości o resetowaniu hasła, weryfikacji adresu e-mail i zmianie adresu e-mail mogą być wysyłane przez Firebase lub z własnego serwera poczty dewelopera. Obecnie szablony e-maili Firebase umożliwiają tylko ograniczone dostosowywanie.

  • Potwierdzenie zmiany adresu e-mail

    Gdy użytkownik zdecyduje się zmienić adres e-mail, Identity Toolkit wyśle na nowy adres e-mail e-maila z linkiem do dalszego procesu zmiany adresu e-mail.

    Firebase potwierdza zmianę adresu e-mail, wysyłając na stary adres e-mail e-maila z linkiem umożliwiającym cofnięcie zmiany.

  • Wdrażanie dostawcy tożsamości

    Narzędzie Identity Toolkit umożliwiało stopniowe dodawanie dostawców tożsamości do systemu logowania, aby umożliwić Ci eksperymentowanie z ich wpływem na prośby o pomoc. Ta funkcja została usunięta z Uwierzytelniania Firebase.

Różnice po stronie klienta

W Firebase funkcje udostępniane przez Google Identity Toolkit są podzielone na 2 elementy:

  • Pakiety SDK uwierzytelniania Firebase

    W Uwierzytelnianiu Firebase funkcje interfejsu REST API pakietu Identity Toolkit zostały zapakowane 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 z profilu użytkownika, łączyć, aktualizować i usuwać konta oraz resetować hasła, zamiast komunikować się z usługą w back-endzie za pomocą wywołań REST.

  • FirebaseUI Auth

    Wszystkie przepływy interfejsu użytkownika związane z zarządzaniem logowaniem, rejestracją, odzyskiwaniem hasła i połączaniem kont zostały przebudowane przy użyciu pakietów SDK usługi Uwierzytelnianie Firebase. Są one dostępne jako pakiety SDK typu open source na iOS i Androida, aby umożliwić Ci pełne dostosowywanie procesów w sposób niedostępny w przypadku Identity Toolkit.

Dodatkowe różnice:

  • Sesje i migracja

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

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ę Administracja.

  3. Otwórz Konta usługi. Tutaj możesz zobaczyć konto usługi skonfigurowane wcześniej w przypadku 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. Plik JSON zawierający dane logowania do konta usługi zostanie pobrany. Będzie on potrzebny do zainicjowania pakietu SDK w następnym kroku.

  5. Wróć do konsoli Firebase. W sekcji Autoryzacja otwórz stronę Szablony e-maili. Na tej stronie możesz dostosować szablony e-maili w aplikacji.

    W przypadku resetowania haseł, zmiany adresów e-mail i weryfikacji adresów e-mail w Identity Toolkit użytkownicy musieli uzyskać kod OOB z serwera Identity Toolkit, a potem 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 czynności.

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

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

      $ npm init
      $ npm install --save firebase-admin
      
    2. W kodzie możesz uzyskać dostęp do Firebase, używając:

      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 przeniesieniem danych na platformę aplikacji: Android, iOS lub internet.

Serwery i JavaScript

Ważne zmiany

Wdrożenie Firebase na potrzeby internetu różni się od Identity Toolkit pod kilkoma względami.

  • Zarządzanie sesjami przeglądarki

    Wcześniej, gdy użytkownik uwierzytelnił się za pomocą widżetu Identity Toolkit, był ustawiany plik cookie, który służył do inicjowania sesji. Plik cookie miał 2-tygodniowy okres ważności i służył do umożliwienia użytkownikowi korzystania z widżetu 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 frameworku.

    Pakiety SDK klienta Firebase zarządzają teraz tokenami Firebase ID i współpracują z backendem Uwierzytelniania Firebase, aby sesja była aktualna. Sesje wygasają, gdy na koncie nastąpiły ważne zmiany (np. zmiana hasła). Tokeny Firebase ID nie są automatycznie ustawiane jako pliki cookie w kliencie internetowym i mają czas ważności wynoszący tylko godzinę. Jeśli nie chcesz, aby sesje trwały tylko godzinę, nie używaj tokenów identyfikatora Firebase jako plików cookie do sprawdzania wszystkich żądań stron. Zamiast tego musisz skonfigurować listenera, który będzie działał, gdy użytkownik się zaloguje, pobierać token identyfikatora Firebase, weryfikować token i tworzyć własne pliki cookie za pomocą systemu zarządzania plikami cookie frameworka.

    Czas trwania sesji pliku cookie musisz ustawić na podstawie wymagań bezpieczeństwa aplikacji.

  • Proces logowania na stronie internetowej

    Wcześniej, gdy użytkownik inicjował logowanie, był przekierowywany na stronę accountchooser.com, aby poznać identyfikator, którego chce użyć. Przepływ interfejsu użytkownika Firebase Auth rozpoczyna się teraz od listy metod logowania, w tym opcji e-mail, która prowadzi do accountchooser.com w przypadku internetu i korzysta z interfejsu hintRequest API na Androidzie. Ponadto adresy e-mail nie są już wymagane w interfejsie Firebase. Ułatwi to obsługę użytkowników anonimowych, użytkowników uwierzytelniania niestandardowego lub użytkowników z dostawców, którzy nie wymagają adresów e-mail.

  • Widżet zarządzania kontem

    Ten widget udostępnia interfejs, za pomocą którego użytkownicy mogą zmieniać adresy e-mail, hasła i odłączać konta od dostawców tożsamości. Jest on obecnie w trakcie opracowywania.

  • Przycisk logowania lub widżet

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

  • Brak signOutUrl

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

  • Brak oobActionUrl

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

  • Personalizacja usługi porównywania cen za pomocą kodu CSS

    FirebaseUI używa stylizacji Material Design Lite, która dynamicznie dodaje animacje Material Design.

Krok 1. Zmień kod serwera

  1. Jeśli Twój serwer korzysta z tokenu Identity Toolkit (ważny przez 2 tygodnie) do zarządzania sesjami użytkowników w internecie, musisz przekształcić serwer w taki sposób, aby używał własnego pliku cookie sesji.

    1. Wdrożyć punkt końcowy do weryfikacji tokena identyfikatora Firebase i ustawienia pliku cookie sesji dla użytkownika. Aplikacja kliencka wysyła token Firebase ID do tego punktu końcowego.
    2. Jeśli żądanie przychodzące zawiera Twój własny plik cookie sesji, możesz uznać, że użytkownik został uwierzytelniony. W przeciwnym razie traktuj żądanie jako nieuwierzytelnione.
    3. Jeśli nie chcesz, aby użytkownicy utracili swoje dotychczasowe sesje, poczekaj 2 tygodnie, aż wszystkie tokeny pakietu narzędzi Identity Toolkit wygasną, lub zweryfikuj tokeny podwójne w swojej aplikacji internetowej, jak opisano poniżej w kroku 3.
  2. Ponieważ tokeny Firebase różnią się od tokenów Identity Toolkit, musisz zaktualizować logikę weryfikacji tokenów. Zainstaluj na serwerze pakiet SDK Firebase Server. Jeśli używasz języka, którego nie obsługuje pakiet SDK Firebase Server, pobierz bibliotekę do sprawdzania poprawności tokena JWT dla swojego środowiska i prawidłowo potwierdź poprawność tokena.

  3. Po wprowadzeniu powyższych zmian nadal możesz 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 na serwerze, która analizuje token i określa, czy do jego weryfikacji należy użyć pakietu SDK Firebase czy pakietu SDK Identity Toolkit. Jeśli masz tylko aplikację internetową, wszystkie nowe żądania uwierzytelniania będą przekierowywane do Firebase, dlatego musisz używać tylko metod weryfikacji tokenów 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 i wklej fragment kodu inicjalizacji na swoją stronę internetową.
  2. Dodaj FirebaseUI Auth do aplikacji:

    <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 sesją używasz tokena ID z Identity Toolkit, musisz wprowadzić te zmiany po stronie klienta:

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

    2. Wyślij token identyfikatora Firebase do serwera zaplecza, sprawdź go i wystaw własny plik cookie sesji.

      Podczas wykonywania operacji narażonych na wyciek danych lub wysyłania uwierzytelnionych żądań edycji do serwera nie polegaj wyłącznie na pliku cookie sesji. Musisz zapewnić dodatkową ochronę przed atakami CSRF (Cross-Site Request Forgery).

      Jeśli Twoja platforma nie zapewnia ochrony przed atakami CSRF, możesz zapobiec takim atakom, uzyskując token identyfikatora Firebase dla zalogowanego użytkownika za pomocą funkcji getToken() i dołączając ten token do każdego żądania (domyślnie zostanie też wysłany plik cookie sesji). Następnie możesz zweryfikować ten token, używając pakietu SDK serwera Firebase, a także sprawdzając plik cookie sesji, którego dokonała Twoja platforma backendowa. Dzięki temu utrudnisz przeprowadzanie ataków CSRF, ponieważ token Firebase ID jest przechowywany tylko w pamięci internetowej, a nigdy w pliku cookie.

    3. Tokeny zestawu narzędzi tożsamości są ważne przez 2 tygodnie. Możesz nadal wydawać tokeny, które będą ważne przez 2 tygodnie, lub wydłużyć lub skrócić ten czas w zależności od wymagań bezpieczeństwa aplikacji. Gdy użytkownik się wyloguje, usuń plik cookie sesji.

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

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

  2. W przypadku każdego obsługiwanego dostawcy logowania federacyjnego:

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

Android

Krok 1. Dodaj Firebase do swojej aplikacji

  1. Otwórz konsolę Firebase i wybierz projekt Identity Toolkit, który został już zaimportowany.

  2. Na stronie Przegląd kliknij Dodaj aplikację, a potem Dodaj Firebase do aplikacji na Androida. W oknie Dodawanie Firebase podaj nazwę pakietu aplikacji i odcisk palca certyfikatu podpisywania, a potem kliknij Dodaj aplikację. Plik konfiguracji google-services.json zostanie pobrany na komputer.

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

  4. W pliku build.gradle na poziomie projektu (<var>your-project</var>/build.gradle) określ 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ć w nim wtyczkę google-services:

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

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

    Wtyczka google-services używa pliku google-services.json do konfigurowania aplikacji pod kątem używania Firebase.

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

    compile 'com.google.firebase:firebase-auth:23.1.0'
    compile 'com.google.android.gms:play-services-auth:21.3.0'
    

Krok 2. Usuń pakiet SDK Identity Toolkit

  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 swojej aplikacji

  1. Dodaj pakiet SDK Firebase do aplikacji, wykonując te polecenia:

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

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

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

Krok 2. Usuń pakiet SDK Identity Toolkit

  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.