Przejście z Google Identity Toolkit na Uwierzytelnianie Firebase

Najnowsza wersja pakietu Google Identity Toolkit jest dostępna jako Uwierzytelnianie Firebase. W przyszłości prace nad funkcjami w Identity Toolkit zostaną wstrzymane, a wszystkie nowe funkcje będą realizowane w Uwierzytelnianiu Firebase. Zachęcamy deweloperów do jak najszybszego przejścia na Uwierzytelnianie Firebase w swoich aplikacjach. Identity Toolkit działa jednak nadal i nie zostanie wycofany bez kolejnego ogłoszenia.

Nowe funkcje

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

  • Dostęp do wszystkich usług Firebase

    Firebase to platforma mobilna, która pomaga szybko tworzyć wysokiej jakości aplikacje, zwiększać liczbę użytkowników i zarabiać więcej pieniędzy. Firebase oferuje funkcje uzupełniające, które można ze sobą łączyć. Do ich obsługi można też wykorzystać infrastrukturę do analityki na urządzeniach mobilnych, komunikacji w chmurze, bazy danych czasu rzeczywistego, miejsca przechowywania plików, hostingu statycznego, konfiguracji zdalnej, raportowania awarii i testowania Androida{/1.

  • Zaktualizowane interfejsy użytkownika

    Całkowicie przebudowaliśmy przepływy interfejsu na podstawie najnowszych badań UX. Obejmuje to odzyskiwanie hasła, łączenie kont oraz procesy ujednoznacznienia nowych i istniejących kont, których kodowanie i debugowanie często zajmuje dużo czasu. Jest zintegrowany z Androidem za pomocą funkcji Smart Lock na hasła, która znacznie usprawnia proces logowania i rejestracji w aplikacjach uczestniczących w programie. Umożliwia też łatwe modyfikowanie motywu zgodnie z potrzebami aplikacji. Wersje na Androida i iOS zostały udostępnione na zasadach open source.

  • Uproszczona konfiguracja serwera

    Ułatwiliśmy deweloperom korzystanie z Uwierzytelniania Firebase. Dzięki pakietowi narzędzi do obsługi tożsamości zauważyliśmy, że wielu deweloperów nie wdraża procesu odzyskiwania dostępu do poczty e-mail, przez co użytkownicy nie mogą odzyskać kont, jeśli zapomną hasło. Uwierzytelnianie Firebase może wysyłać do użytkowników wiadomości weryfikacyjne, resetowanie hasła i wiadomości o zmianie hasła. Taki tekst można łatwo dostosować do potrzeb użytkowników. Oprócz tego nie musisz już hostować widżetów interfejsu do hostowania przekierowań i wykonywania operacji zmiany hasła.

  • Nowa konsola administracyjna

    W Firebase dostępna jest nowa konsola programisty, a w sekcji Uwierzytelnianie możesz wyświetlać, modyfikować i usuwać konta użytkowników. Może to być bardzo pomocne przy debugowaniu 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 m.in. logować się i rejestrować nowych oraz starych użytkowników, uzyskiwać dostęp do właściwości użytkownika, łączyć, aktualizować i usuwać konta, resetować hasła i wykonywać inne działania bez konieczności korzystania z stałego interfejsu. Jeśli wolisz, możesz ręcznie utworzyć własny proces logowania i środowisko logowania na podstawie tego interfejsu API.

  • Zarządzanie sesjami w aplikacjach mobilnych

    Za pomocą Identity Toolkit aplikacje tworzyły własny stan sesji na podstawie początkowego zdarzenia uwierzytelniania z Identity Toolkit. Uwierzytelnianie Firebase korzysta z usługi backendu, która pobiera token odświeżania ze 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ą mogły generować nowych tokenów dostępu, a tym samym dostęp zostanie zablokowany do czasu ponownego uwierzytelnienia użytkownika na danym urządzeniu.

  • Uwierzytelnianie anonimowe i GitHub

    Uwierzytelnianie Firebase obsługuje 2 nowe typy uwierzytelniania: GitHub i anonimowe. Logowanie anonimowe pozwala utworzyć unikalny identyfikator użytkownika bez konieczności logowania się czy rejestracji. Mając anonimowego użytkownika, możesz teraz wykonywać uwierzytelnione wywołania interfejsu API tak jak zwykły użytkownik. Gdy użytkownik zdecyduje się założyć konto, wszystkie działania zostaną zachowane za pomocą tego samego identyfikatora użytkownika. Świetnie sprawdza się on w sytuacjach, takich jak koszyk na zakupy po stronie serwera lub inna aplikacja, w której chcesz zaangażować użytkownika przed wysłaniem go przez proces rejestracji.

Różnice funkcji

Niektóre funkcje Identity Toolkit nie są obecnie dostępne w Uwierzytelnianiu Firebase. Inne zostały przeprojektowane i działają inaczej. Jeśli te funkcje są ważne dla Twojej aplikacji, możesz nie przenosić ich od razu. W wielu przypadkach mogą one nie mieć znaczenia dla Twojej aplikacji lub mogą istnieć proste rozwiązania zastępcze, które umożliwią przeprowadzenie migracji.

Różnice po stronie serwera

Podstawowa usługa Identity Toolkit wraz z bazowymi interfejsami API REST, logiką weryfikacji konta i główną bazą danych użytkowników przeszła tylko drobne aktualizacje. Zmieniły się jednak niektóre funkcje oraz sposób, w jaki integrujesz Uwierzytelnianie Firebase z usługą.

  • Dostawcy tożsamości

    Usługi PayPal i AOL nie są obsługiwane. Użytkownicy kont u tych dostawców tożsamości nadal mogą logować się w Twojej aplikacji w ramach procesu odzyskiwania hasła i ustawić hasło do swojego konta.

  • Biblioteki serwerów

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

  • E-maile do zarządzania kontem

    Resetowanie hasła, potwierdzanie adresu e-mail oraz wiadomości o zmianie adresu e-mail może być wykonywane przez Firebase lub z serwera poczty dewelopera. Obecnie szablony e-mail Firebase można dostosowywać w ograniczonym zakresie.

  • Potwierdzenie zmiany adresu e-mail

    Gdy użytkownik zdecyduje się zmienić adres e-mail w Identity Toolkit, wysyła na nowy adres e-maila z linkiem do kontynuowania procesu zmiany adresu.

    Firebase potwierdza zmianę adresu e-mail, wysyłając na stary adres e-mail wiadomość z linkiem umożliwiającym wycofanie zgody.

  • Wdrażanie dostawcy tożsamości

    Usługa Identity Toolkit umożliwiała stopniowe dodawanie dostawców tożsamości do systemu logowania, dzięki czemu można było eksperymentować z ich wpływem na żądania pomocy. 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 komponenty:

  • Pakiety SDK Uwierzytelniania Firebase

    W Uwierzytelnianiu Firebase funkcje zapewniane przez interfejs Identity Toolkit API typu REST zostały dołączone do pakietów SDK klientów dostępnych na Androida, iOS i JavaScriptu. Pakiet SDK umożliwia logowanie się i rejestrowanie użytkowników, uzyskiwanie dostępu do informacji o ich profilach, łączenie, aktualizowanie i usuwanie kont, a także resetowanie haseł przy użyciu pakietu SDK klienta. Nie jest to wymagane do komunikacji z usługą backendu za pomocą wywołań REST.

  • Uwierzytelnianie FirebaseUI

    Wszystkie przepływy w interfejsie do zarządzania logowaniem, rejestracją, odzyskiwaniem haseł i łączeniem kont zostały przebudowane za pomocą pakietów uwierzytelniania Frebase. Są one dostępne jako pakiety SDK typu open source na iOS i Androida, co pozwala na całkowite dostosowanie przepływów w sposób niedostępny w Identity Toolkit.

Dodatkowe różnice:

  • Sesje i migracja

    Sesje są zarządzane w różny sposób w Identity Toolkit i Uwierzytelnianiu Firebase, dlatego po uaktualnieniu pakietu SDK obecne sesje użytkowników zostaną zakończone, a użytkownicy będą musieli zalogować się ponownie.

Zanim zaczniesz

Przed przejściem z Identity Toolkit na Uwierzytelnianie Firebase musisz przejść

  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 zobaczysz konto usługi skonfigurowane wcześniej pod kątem Identity Toolkit.

  4. Obok konta usługi kliknij > Utwórz klucz. Następnie w oknie Utwórz klucz prywatny ustaw typ klucza na JSON i kliknij Utwórz. Zostanie pobrany plik JSON zawierający dane logowania do konta usługi. Będzie Ci potrzebne 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 dla swojej aplikacji.

    Gdy w narzędziu Identity Toolkit użytkownik resetuje hasła, zmienia adresy e-mail i weryfikuje adresy e-mail, konieczne było uzyskanie kodu OOB z serwera Identity Toolkit, a następnie wysłanie 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 uzyskać dostęp do usług Firebase na swoim serwerze, zainstaluj pakiet SDK Firebase.

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

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

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

Następnie wykonaj czynności migracji odpowiednie dla platformy Twojej aplikacji: Android, iOS lub internet.

Serwery i JavaScript

Ważne zmiany

Istnieją też dodatkowe różnice w implementacji internetowej Firebase w porównaniu z Identity Toolkit.

  • Zarządzanie sesjami internetowymi

    Wcześniej w przypadku uwierzytelnienia użytkownika przy użyciu widżetu zestawu narzędzi tożsamości dla użytkownika był ustawiany plik cookie, który posłużył do zatrzymania sesji. Był on aktywny przez 2 tygodnie i umożliwił użytkownikowi zmianę hasła i adresu e-mail za pomocą widżetu zarządzania kontem. Niektóre witryny używały tego pliku cookie do uwierzytelniania wszystkich pozostałych żądań stron w witrynie. Inne witryny korzystały z tych plików cookie, aby tworzyć własne pliki cookie w ramach systemu zarządzania plikami cookie swojej platformy.

    Pakiety SDK klienta Firebase zarządzają tokenami identyfikatorów Firebase i współpracują z backendem Uwierzytelniania Firebase, aby zapewnić aktualność sesji. Backend wygasa sesje po wystąpieniu ważnych zmian na koncie (takich jak zmiana hasła użytkownika). Tokeny identyfikatorów Firebase nie są automatycznie ustawiane jako pliki cookie w kliencie internetowym i mają tylko godzinę ważności. Jeśli nie chcesz, aby sesja trwała tylko godzinę, tokeny identyfikatora Firebase nie mogą być używane jako pliki cookie do weryfikowania wszystkich żądań stron. Zamiast tego trzeba skonfigurować detektor logowania, uzyskać token identyfikatora Firebase, zweryfikować token oraz utworzyć własny plik cookie za pomocą systemu zarządzania plikami cookie platformy.

    Musisz ustawić czas trwania sesji pliku cookie zależnie od wymagań aplikacji w zakresie bezpieczeństwa.

  • Proces logowania w przeglądarce

    Wcześniej użytkownicy byli przekierowywani na stronę accountchooser.com po inicjowaniu logowania w celu uzyskania informacji, jakiego identyfikatora chciał użyć. Przepływ interfejsu Uwierzytelniania Firebase zaczyna się teraz od listy metod logowania, w tym opcji e-mail, która trafia na stronę accountchooser.com w przypadku przeglądarki i korzysta z interfejsu hintRequest API na Androidzie. 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 oraz użytkowników od dostawców, w przypadku których adresy e-mail nie są wymagane.

  • Widżet zarządzania kontem

    Ten widżet zawiera interfejs użytkownika, w którym użytkownicy mogą zmieniać adresy e-mail, zmieniać hasła oraz odłączać konta od dostawców tożsamości. Obecnie jest ona w fazie rozwoju.

  • Przycisk/widżet logowania

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

  • Brak parametru signOutUrl

    Musisz zadzwonić pod numer firebase.auth.signOut() i przeprowadzić wywołanie zwrotne.

  • Brak elementu oobActionUrl

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

  • Dostosowywanie CSS

    FirebaseUI wykorzystuje styl Material Design Lite, co pozwala dynamicznie dodawać animacje Material Design.

Krok 1. Zmień kod serwera

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

    1. Zaimplementuj punkt końcowy do weryfikowania 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 żądanie przychodzące zawiera 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 żaden z użytkowników utraciły dotychczasowe zalogowane sesje, poczekaj 2 tygodnie, aż wszystkie tokeny Identity Toolkit wygasną, albo przeprowadź weryfikację aplikacji internetowej przy użyciu dwóch tokenów zgodnie z opisem poniżej w kroku 3.
  2. Tokeny Firebase różnią się od tokenów Identity Toolkit, dlatego musisz zaktualizować logikę weryfikacji tokenów. Zainstaluj na serwerze pakiet SDK serwera Firebase lub, jeśli używasz języka nieobsługiwanego przez pakiet SDK serwera Firebase, pobierz bibliotekę walidacji tokena JWT dla swojego środowiska i prawidłowo zweryfikuj token.

  3. Po wprowadzeniu powyższych aktualizacji po raz pierwszy możesz nadal mieć ścieżki kodu oparte na tokenach Identity Toolkit. Jeśli korzystasz z aplikacji na iOS lub Androida, użytkownicy będą musieli uaktualnić aplikację do nowej wersji, aby nowe ścieżki kodu działały. Jeśli nie chcesz wymuszać na użytkownikach aktualizacji aplikacji, możesz dodać dodatkową funkcję weryfikacji serwera, która sprawdzi token i określi, czy do jego weryfikacji musi użyć pakietu SDK Firebase czy pakietu SDK Identity Toolkit. Jeśli masz tylko aplikację internetową, wszystkie nowe żądania uwierzytelniania będą przenoszone do Firebase, więc konieczne będzie używanie tylko metod weryfikacji tokena Firebase.

Zobacz materiały referencyjne na temat interfejsu Firebase Web API.

Krok 2. Zaktualizuj kod HTML

  1. Dodaj kod inicjowania Firebase do swojej aplikacji:

    1. Otwórz projekt w konsoli Firebase.
    2. Na stronie Przegląd kliknij kolejno Dodaj aplikację i Dodaj Firebase do swojej aplikacji internetowej. Wyświetli się fragment kodu, który inicjuje Firebase.
    3. Skopiuj fragment kodu inicjowania i wklej go na swojej stronie internetowej.
  2. Dodaj do aplikacji Uwierzytelnianie FirebaseUI:

    <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ń pakiet SDK Identity Toolkit z aplikacji.

  4. Jeśli do zarządzania sesjami używasz tokena identyfikatora zestawu narzędzi tożsamości, musisz wprowadzić te zmiany po stronie klienta:

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

    2. Wyślij token identyfikatora Firebase do serwera backendu, zweryfikuj go i utwórz własny plik cookie sesji.

      Podczas wykonywania działań związanych z poufnymi danymi lub wysyłania uwierzytelnionych żądań edycji do serwera nie należy polegać wyłącznie na pliku cookie sesji. Konieczne będzie podanie dodatkowej ochrony przed fałszowaniem żądań z innych witryn (CSRF).

      Jeśli platforma nie zapewnia ochrony CSRF, jednym ze sposobów zapobiegania atakowi może być uzyskanie tokena identyfikatora Firebase zalogowanego użytkownika za pomocą identyfikatora getToken() i dodawanie tego tokena do każdego żądania (plik cookie sesji również będzie domyślnie wysyłany). Potem trzeba będzie zweryfikować token za pomocą pakietu SDK serwera Firebase oprócz sprawdzania plików cookie sesji, które zostało wykonane przez platformę backendu. Utrudni to przeprowadzenie ataków CSRF, ponieważ token identyfikatora Firebase jest przechowywany tylko za pomocą miejsca na dane w witrynie, a nie w pliku cookie.

    3. Tokeny Identity Toolkit są ważne przez 2 tygodnie. Możesz dalej wydawać tokeny przez 2 tygodnie albo wydłużyć lub skrócić ten czas w zależności od wymagań bezpieczeństwa aplikacji. Gdy użytkownik się wyloguje, wyczyść plik cookie sesji.

Krok 3. Zaktualizuj przekierowania dostawcy tożsamości

  1. W konsoli Firebase otwórz sekcję Uwierzytelnianie i kliknij kartę Sign-in Method (Metoda logowania).

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

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

Android

Krok 1. Dodaj Firebase do swojej aplikacji

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

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

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

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

    defaultConfig {
       …..
      applicationId "com.your-app"
    }
    
  5. Także w pliku build.gradle na poziomie projektu dodaj 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 ten wiersz, aby włączyć wtyczkę google-services:

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

    Wtyczka google-services wykorzystuje plik google-services.json, aby skonfigurować Twoją aplikację pod kątem korzystania z Firebase.

  7. Także w pliku build.gradle na poziomie aplikacji dodaj zależność Uwierzytelnianie Firebase:

    compile 'com.google.firebase:firebase-auth:23.0.0'
    compile 'com.google.android.gms:play-services-auth:21.2.0'
    

Krok 2. Usuń pakiet SDK Identity Toolkit

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

Krok 3. Dodaj FirebaseUI do aplikacji

  1. Dodaj do aplikacji Uwierzytelnianie FirebaseUI.

  2. Zastąp wywołania pakietu SDK Identity Toolkit w aplikacji wywołaniami FirebaseUI.

iOS

Krok 1. Dodaj Firebase do swojej aplikacji

  1. Dodaj pakiet SDK Firebase do aplikacji, uruchamiając następujące polecenia:

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

  3. Na stronie Przegląd kliknij Dodaj aplikację i wybierz Dodaj Firebase do aplikacji na iOS. W oknie Dodaj Firebase podaj identyfikator pakietu aplikacji i identyfikator App Store, a potem kliknij Dodaj aplikację. Plik konfiguracyjny GoogleService-Info.plist zostanie pobrany na Twój komputer. Jeśli masz w projekcie wiele identyfikatorów pakietów, każdy z nich musi być połączony w konsoli Firebase, aby mógł 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 Uwierzytelnianie FirebaseUI.

  2. Zastąp wywołania pakietu SDK Identity Toolkit w aplikacji wywołaniami FirebaseUI.