Przejście z Google Identity Toolkit na Uwierzytelnianie Firebase

Najnowsza wersja narzędzi Google Identity Toolkit została opublikowana jako Uwierzytelnianie Firebase. W przyszłości działanie funkcji w Identity Toolkit nie będzie możliwe, a wszystkie nowe funkcje będą tworzone z wykorzystaniem Uwierzytelniania Firebase. Zachęcamy deweloperów, którzy korzystają z narzędzi do obsługi tożsamości, do przejścia na Uwierzytelnianie Firebase, gdy tylko będzie to możliwe w ich aplikacjach. Pakiet narzędzi Identity Toolkit będzie jednak działać nadal i nie zostanie wycofany bez powiadomienia.

Nowe funkcje

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

  • Dostęp do wszystkich funkcji Firebase

    Firebase to platforma mobilna, która pomaga szybko tworzyć wysokiej jakości aplikacje, zwiększać liczbę użytkowników i zarabiać więcej. Firebase obejmuje dodatkowe funkcje, które można zestawiać ze swoimi potrzebami, i infrastrukturę do: mobilnej analityki, komunikacji w chmurze, bazy danych w czasie rzeczywistym, miejsca na pliki, hostingu statycznego, konfiguracji zdalnej, raportowania awarii na urządzeniach mobilnych oraz Androida testowania.

  • Zaktualizowane interfejsy

    Całkowicie przebudowaliśmy interfejs na podstawie najnowszych badań UX Google. Obejmuje to odzyskiwanie hasła, łączenie kont oraz procesy ujednoznacznienia nowych i istniejących kont, które często wymagają czasu na kodowanie i debugowanie. Integracja z funkcją Smart Lock na hasła na Androidzie znacznie poprawia konwersje polegające na logowaniu i rejestracji w przypadku aplikacji uczestniczących w programie. Umożliwia też łatwe modyfikowanie motywu, aby dostosować go do potrzeb aplikacji, a wersje na Androida i iOS zostały udostępnione na licencji open source.

  • Uproszczona konfiguracja serwera

    Ułatwiliśmy deweloperom korzystanie z Uwierzytelniania Firebase. Dzięki pakietom narzędzi do obsługi tożsamości wielu deweloperów zdecydowało się nie wdrażać procesu odzyskiwania poczty e-mail, co uniemożliwiało użytkownikom odzyskanie konta, jeśli zapomnieli hasła. Uwierzytelnianie Firebase umożliwia wysyłanie do użytkownika wiadomości w celu weryfikacji adresu e-mail, resetowania hasła i zmiany hasła. Tekst można łatwo dostosowywać do potrzeb użytkowników. Nie musisz też hostować widżet interfejsu do hostowania przekierowań i wykonywania operacji zmiany haseł.

  • Nowa konsola administracyjna

    W Firebase mamy nową konsolę programisty, a sekcja Uwierzytelnianie umożliwia wyświetlanie, modyfikowanie i usuwanie kont użytkowników. Może to być bardzo pomocne w debugowaniu procesu logowania i rejestracji. Konsola pozwala też konfigurować metody uwierzytelniania i dostosowywać szablony e-maili.

  • Nowe pakiety SDK

    Wszystkie interfejsy API serwera Identity Toolkit są teraz natywnie dostępne dla każdej z naszych bibliotek klienta (Android, iOS, aplikacje internetowe). Deweloperzy będą mogli logować się oraz rejestrować starych i nowych użytkowników, uzyskiwać dostęp do właściwości użytkowników, łączyć, aktualizować i usuwać konta, resetować hasła i wykonywać wiele innych czynności bez konieczności wiązania ze stałym interfejsem użytkownika. Jeśli wolisz, możesz ręcznie stworzyć na jego podstawie cały własny proces logowania.

  • Zarządzanie sesjami w aplikacjach mobilnych

    Za pomocą Identity Toolkit aplikacje tworzyły własny stan sesji na podstawie zdarzenia początkowego uwierzytelniania z Identity Toolkit. Uwierzytelnianie Firebase korzysta z usługi backendu, która pobiera token odświeżania wytworzony ze zdarzenia uwierzytelniania i wymienia go na godzinne tokeny dostępu do 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, aż użytkownik ponownie uwierzytelni się na danym urządzeniu.

  • Uwierzytelnianie anonimowych i GitHub

    Uwierzytelnianie Firebase obsługuje 2 nowe typy uwierzytelniania: GitHub i anonimowe. Logowanie anonimowe pozwala utworzyć unikalny identyfikator użytkownika bez konieczności przeprowadzania jakiegokolwiek procesu logowania lub rejestracji. Korzystając z 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 jego aktywność jest zachowywana z tym samym identyfikatorem. Jest to szczególnie przydatne w sytuacjach takich jak koszyk na zakupy po stronie serwera lub aplikacja, w której chcesz zaangażować użytkownika przed skierowaniem go przez proces rejestracji.

Różnice w funkcjach

Niektóre funkcje Identity Toolkit nie są obecnie dostępne w usłudze Uwierzytelnianie Firebase, a 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 te funkcje mogą nie być istotne dla Twojej aplikacji lub mogą istnieć łatwe problemy zastępcze, które umożliwią kontynuowanie migracji.

Różnice po stronie serwera

Podstawowa usługa Identity Toolkit wraz z interfejsami API typu REST, logiką weryfikacji konta i główną bazą danych użytkowników została poddana tylko niewielkim zmianom. Zmieniły się jednak pewne funkcje i sposób, w jaki integrujesz Uwierzytelnianie Firebase ze swoją usługą.

  • Dostawcy tożsamości

    PayPal i AOL nie są obsługiwane. Użytkownicy kont pochodzących od tych dostawców tożsamości nadal będą mogli logować się w Twojej aplikacji za pomocą procesu odzyskiwania hasła i ustawić hasło do swojego konta.

  • Biblioteki serwerów

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

  • E-maile dotyczące zarządzania kontem

    Wiadomości dotyczące resetowania hasła, potwierdzania adresu e-mail i zmiany adresu e-mail mogą być wysyłane przez Firebase lub z serwera poczty dewelopera. Obecnie szablony e-maili Firebase umożliwiają ograniczone dostosowywanie.

  • Potwierdzenie zmiany adresu e-mail

    Gdy użytkownik zdecyduje się zmienić swój adres e-mail w Identity Toolkit, na nowy adres jest wysłany e-mail z linkiem do kontynuowania tej procedury.

    Firebase potwierdza zmianę adresu e-mail, wysyłając na stary adres e-mail wiadomość o odwołaniu z linkiem umożliwiającym cofnięcie zmiany.

  • Wdrażanie dostawcy tożsamości

    Identity Toolkit umożliwił stopniowe dodawanie dostawców tożsamości do systemu logowania, dzięki czemu można było eksperymentować z jego 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 komponenty:

  • Pakiety SDK uwierzytelniania Firebase

    W przypadku Uwierzytelniania Firebase funkcje udostępniane przez interfejs Identity Toolkit API REST znalazły się w pakietach SDK klientów dostępnych na Androida, iOS i JavaScript. Za pomocą pakietu SDK możesz logować się i rejestrować użytkowników, uzyskiwać dostęp do informacji o profilach użytkowników, łączyć, aktualizować i usuwać konta oraz resetować hasła za pomocą pakietu SDK klienta, zamiast komunikować się z usługą backendu za pomocą wywołań REST.

  • Uwierzytelnianie FirebaseUI

    Wszystkie przepływy interfejsu użytkownika umożliwiające zarządzanie logowaniem, rejestracją, odzyskiwaniem hasła i łączeniem kont zostały odtworzone przy użyciu pakietów SDK uwierzytelniania Frebase. Są one dostępne jako pakiety SDK typu open source na iOS i Androida, dzięki czemu możesz całkowicie dostosować przepływy w sposób, który nie jest możliwy przy użyciu Identity Toolkit.

Dodatkowe różnice:

  • Sesje i migracja

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

Zanim zaczniesz

Przed migracją z Identity Toolkit do Uwierzytelniania 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 na potrzeby 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 on potrzebny do zainicjowania pakietu SDK w następnym kroku.

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

    Gdy w narzędziu Identity Toolkit użytkownik resetował hasła, zmieniał adresy e-mail i weryfikował 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 i nie musisz niczego robić.

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

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

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

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

Następnie przeprowadź migrację dla odpowiedniej platformy aplikacji: Android, iOS lub internet.

Serwery i JavaScript

Ważne zmiany

Występuje kilka dodatkowych różnic w implementacji internetowej Firebase z Identity Toolkit.

  • Zarządzanie sesjami internetowymi

    Wcześniej, gdy użytkownik uwierzytelnił się za pomocą widżetu Identity Toolkit, został dla niego ustawiony plik cookie, który posłużył do uruchomienia sesji. Ten plik cookie działał przez 2 tygodnie i umożliwiał użytkownikowi zmianę hasła i adresu e-mail za pomocą widżetu zarządzania kontem. Niektóre witryny używają tego pliku cookie do uwierzytelniania wszystkich innych żądań stron w witrynie. Inne witryny korzystały z tego pliku do tworzenia własnych plików cookie za pomocą systemu zarządzania plikami cookie.

    Pakiety SDK klienta Firebase zarządzają teraz tokenami identyfikatorów Firebase i współpracują z backendem Uwierzytelniania Firebase, by zapewnić aktualność sesji. Backend wygasa sesje po wprowadzeniu ważnych zmian na koncie (np. zmiany hasła użytkownika). Tokeny identyfikatorów Firebase nie są automatycznie ustawiane jako pliki cookie w kliencie internetowym i są ważne przez tylko godzinę. Jeśli nie chcesz, aby sesje trwały tylko godzinę, tokenów identyfikatorów Firebase nie należy używać jako plików cookie do weryfikowania wszystkich żądań stron. Zamiast tego musisz skonfigurować odbiornik, gdy użytkownik się loguje, uzyskać token identyfikatora Firebase, zweryfikować token oraz utworzyć własny plik cookie za pomocą systemu zarządzania plikami cookie Twojej platformy.

    Ustaw czas trwania sesji pliku cookie zgodnie z potrzebami swojej aplikacji w zakresie bezpieczeństwa.

  • Proces logowania w internecie

    Wcześniej podczas inicjowania logowania użytkownicy byli przekierowywani do accountchooser.com, aby sprawdzić, jakiego identyfikatora chcą użyć. Proces uwierzytelniania Firebase zaczyna się teraz od listy metod logowania, w tym opcji poczty e-mail, która trafia do accountchooser.com w przeglądarce i używa interfejsu hintRequest API na Androidzie. Adresy e-mail nie są już wymagane w interfejsie Firebase. Ułatwi to obsługę anonimowych i niestandardowych użytkowników z uwierzytelnianiem lub użytkowników korzystających z usług dostawców, w przypadku których adresy e-mail nie są wymagane.

  • Widżet zarządzania kontem

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

  • 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.

  • Zakaz logowania się

    Musisz zadzwonić pod numer firebase.auth.signOut() i oddzwonić.

  • Brak działania oobActionUrl.

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

  • Dostosowywanie CSS

    Interfejs FirebaseUI wykorzystuje styl Material Design Lite, który dynamicznie dodaje animacje Material Design.

Krok 1. Zmień kod serwera

  1. Jeśli Twój serwer do zarządzania sesjami użytkowników internetowych korzysta z tokena Identity Toolkit (ważnego przez 2 tygodnie), musisz przekonwertować serwer na taki, który będzie wykorzystywał własny plik cookie sesji.

    1. Zaimplementuj punkt końcowy do weryfikowania tokena identyfikatora Firebase i ustawiania pliku cookie sesji dla użytkownika. Aplikacja klienta wysyła do tego punktu końcowego token identyfikatora Firebase.
    2. Jeśli przychodzące żądanie zawiera własny plik cookie sesji, możesz uznać, że użytkownik został uwierzytelniony. W przeciwnym razie nie traktuj żądania jako nieuwierzytelnionego.
    3. Jeśli nie chcesz, aby ktokolwiek z Twoich użytkowników utracił ważność swoich zalogowanych sesji, poczekaj 2 tygodnie, aż wszystkie tokeny Identity Toolkit wygasną, lub przeprowadź weryfikację aplikacji internetowej z użyciem 2 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 Firebase Server, pobierz bibliotekę weryfikacji tokenów JWT dla swojego środowiska i odpowiednio zweryfikuj token.

  3. Po pierwszym wprowadzeniu powyższych aktualizacji możesz mieć ścieżki kodu oparte na tokenach Identity Toolkit. Jeśli masz aplikacje na iOS lub Androida, użytkownicy będą musieli uaktualnić je do nowej wersji, aby działały nowe ścieżki kodu. Jeśli nie chcesz zmuszać użytkowników do aktualizowania aplikacji, możesz dodać dodatkowy mechanizm weryfikacji serwera, który sprawdza token i określa, czy do weryfikacji tokena 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. Dlatego musisz korzystać tylko z metod weryfikacji tokena Firebase.

Zobacz dokumentację interfejsu Firebase Web API.

Krok 2. Zaktualizuj kod HTML

  1. Dodaj do aplikacji kod inicjowania Firebase:

    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 zainicjuje Firebase.
    3. Skopiuj fragment kodu inicjującego i wklej go na swoją stronę internetową.
  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ń z aplikacji pakiet SDK Identity Toolkit.

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

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

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

      Nie polegaj wyłącznie na pliku cookie sesji podczas wykonywania operacji związanych z poufnymi danymi lub wysyłania uwierzytelnionych żądań edycji do serwera. Konieczne będzie zapewnienie dodatkowej ochrony przed sfałszowaniem żądań z innych witryn (CSRF).

      Jeśli Twoja platforma nie zapewnia ochrony przed CSRF, jednym ze sposobów na uniknięcie ataku jest uzyskanie tokena identyfikatora Firebase dla zalogowanego użytkownika z interfejsem getToken() i dodawanie go do każdego żądania (plik cookie sesji także będzie domyślnie wysyłany). Następnie możesz zweryfikować ten token za pomocą pakietu SDK serwera Firebase, a także za pomocą sprawdzania plików cookie sesji, który zakończyła się Twoja platforma backendu. Utrudnia to skuteczne ataki CSRF, ponieważ token identyfikatora Firebase jest przechowywany tylko w ramach pamięci internetowej, a nie w pliku cookie.

    3. Tokeny Identity Toolkit są ważne przez 2 tygodnie. Możesz kontynuować wystawianie tokenów przez 2 tygodnie albo wydłużyć lub skrócić je w zależności od wymagań bezpieczeństwa Twojej 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ę 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 już zaimportowany projekt Identity Toolkit.

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

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

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

    defaultConfig {
       …..
      applicationId "com.your-app"
    }
    
  5. Dodatkowo 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. Na dole pliku build.gradle (<var>my-project</var>/<var>app-module</var>/build.gradle) na poziomie aplikacji 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 używa pliku google-services.json do konfigurowania aplikacji pod kątem Firebase.

  7. Dodatkowo w pliku build.gradle na poziomie aplikacji dodaj zależność Uwierzytelniania Firebase:

    compile 'com.google.firebase:firebase-auth:22.3.1'
    compile 'com.google.android.gms:play-services-auth:21.0.0'
    

Krok 2. Usuń pakiet SDK Identity Toolkit

  1. Usuń konfigurację Identity Toolkit z pliku AndroidManifest.xml. Informacje te znajdują się 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 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 swojej aplikacji, uruchamiając te polecenia:

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

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

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

Krok 2. Usuń pakiet SDK Identity Toolkit

  1. Usuń plik 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.