Przejście z Google Identity Toolkit na Uwierzytelnianie Firebase

Najnowsza wersja Google Identity Toolkit została wydana jako Uwierzytelnianie Firebase. Od tej pory prace nad funkcjami Identity Toolkit zostaną wstrzymane, 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 przypadku ich aplikacji. Identity Toolkit będzie jednak nadal działać i nie zostanie wycofany bez wcześniejszego 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 pomnażać swoje przychody. Firebase składa się z uzupełniających się funkcji, które możesz łączyć i dopasowywać do swoich potrzeb. Obejmuje infrastrukturę do: statystyk mobilnych, komunikacji w chmurze, bazy danych czasu rzeczywistego, przechowywania plików, hostingu statycznego, zdalnej konfiguracji, zgłaszania awarii na urządzeniach mobilnych i testowania na Androidzie.

  • Zaktualizowane interfejsy

    Całkowicie przebudowaliśmy procesy interfejsu na podstawie najnowszych badań UX przeprowadzonych przez Google. Obejmuje to odzyskiwanie hasła, łączenie kont, procesy uściślania nowych i istniejących kont, których kodowanie i debugowanie często zajmuje dużo czasu. Integruje Smart Lock na hasła na Androidzie, co znacznie poprawia konwersję logowania i rejestracji w przypadku uczestniczących aplikacji. Umożliwia też łatwe modyfikowanie motywów, aby dopasować je do aplikacji. Aby zapewnić maksymalne możliwości dostosowywania, wersje na Android i iOS zostały udostępnione jako 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 wdrożyło procesu odzyskiwania adresu e-mail, co uniemożliwiało użytkownikom odzyskanie konta, jeśli zapomnieli hasła. Uwierzytelnianie Firebase może wysyłać do użytkownika e-maile z prośbą o potwierdzenie adresu e-mail, wiadomości dotyczące resetowania hasła i powiadomienia o zmianie hasła. Tekst tych wiadomości można łatwo dostosować do potrzeb użytkowników. Dodatkowo nie musisz już hostować widżetów interfejsu na potrzeby hostowania przekierowań i wykonywania operacji zmiany hasła.

  • Nowa konsola administracyjna

    Firebase ma nową konsolę programisty, a sekcja Authentication (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żytkowników, łączyć, aktualizować i usuwać konta, resetować hasła i wykonywać inne czynności bez konieczności korzystania ze stałego interfejsu. Jeśli wolisz, możesz ręcznie utworzyć cały proces logowania i interfejs na podstawie tego interfejsu API.

  • Zarządzanie sesjami w aplikacjach mobilnych

    W 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 podczas 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 uwierzytelnianie GitHub

    Uwierzytelnianie Firebase obsługuje 2 nowe typy uwierzytelniania: GitHub i anonimowe. 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 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. To świetne rozwiązanie w sytuacjach takich jak koszyk po stronie serwera lub dowolna aplikacja, w której chcesz zaangażować użytkownika, zanim wyślesz go do procesu rejestracji.

Różnice między funkcjami

Niektóre funkcje Identity Toolkit nie są obecnie dostę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 chcieć 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ą przeprowadzenie migracji.

Różnice po stronie serwera

Podstawowa usługa Identity Toolkit z powiązanymi interfejsami API typu REST, logiką weryfikacji konta i główną bazą danych użytkowników została poddana tylko niewielkim aktualizacjom. Zmieniły się jednak niektóre funkcje i sposób integracji Uwierzytelniania Firebase z usługą.

  • Dostawcy tożsamości

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

  • Biblioteki serwera

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

  • 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 własnego serwera pocztowego dewelopera. Obecnie szablony e-maili Firebase oferują tylko ograniczone możliwości dostosowywania.

  • Potwierdzenie zmiany adresu e-mail

    W Identity Toolkit, gdy użytkownik zdecyduje się zmienić swój adres e-mail, wysyłany jest e-mail na nowy adres z linkiem do kontynuowania procesu zmiany adresu e-mail.

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

  • Wdrażanie 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 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 udostępniane przez interfejs API REST 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 przy użyciu pakietu SDK klienta zamiast komunikować się z usługą backendu za pomocą wywołań REST.

  • FirebaseUI Auth

    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 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 w przypadku Identity Toolkit.

Inne różnice:

  • Sesje i migracja

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

Zanim zaczniesz

Zanim przejdziesz z Identity Toolkit na Uwierzytelnianie Firebase, musisz

  1. Otwórz konsolę Firebase, kliknij Import Google Project (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 dla 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. 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 Auth otwórz stronę Email Templates (Szablony e-maili). Na tej stronie możesz dostosować szablony e-maili aplikacji.

    W Identity Toolkit, gdy użytkownicy resetowali hasła, zmieniali adresy e-mail i weryfikowali swoje adresy e-mail, trzeba było uzyskać kod OOB z serwera Identity Toolkit, a następnie wysłać go użytkownikom 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 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 za pomocą:

      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

Najważniejsze zmiany

Istnieje wiele dodatkowych różnic między implementacją Firebase w internecie a Identity Toolkit.

  • Zarządzanie sesjami internetowymi

    Wcześniej, gdy użytkownik uwierzytelniał się za pomocą widżetu Identity Toolkit, ustawiany był plik cookie, który służył do uruchamiania sesji. Ten plik cookie miał dwutygodniowy okres ważności i umożliwiał użytkownikowi korzystanie 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 w swojej platformie.

    Pakiety SDK klienta Firebase zarządzają teraz tokenami identyfikacji Firebase i współpracują z backendem Uwierzytelniania Firebase, aby sesja była aktualna. Backend powoduje wygaśnięcie sesji, gdy na koncie zostaną wprowadzone ważne zmiany (np. zmiana hasła użytkownika). Tokeny identyfikacji Firebase nie są automatycznie ustawiane jako pliki cookie w kliencie internetowym i mają tylko godzinny okres ważności. Jeśli nie chcesz, aby sesje trwały tylko godzinę, tokeny identyfikacji Firebase nie nadają się do użycia jako pliki cookie do sprawdzania wszystkich żądań stron. Zamiast tego musisz skonfigurować detektor, który będzie wykrywać logowanie się użytkownika, pobrać token identyfikacji Firebase, zweryfikować token i utworzyć własny plik cookie za pomocą systemu zarządzania plikami cookie w Twojej platformie.

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

  • Proces logowania w internecie

    Wcześniej po rozpoczęciu logowania użytkownicy byli przekierowywani na stronę accountchooser.com, aby dowiedzieć się, jakiego identyfikatora chcą użyć. Przepływ interfejsu Firebase Auth UI zaczyna się teraz od listy metod logowania, w tym opcji adresu e-mail, która w przypadku internetu prowadzi do accountchooser.com, a na Androidzie korzysta z interfejsu hintRequest API. Ponadto adresy e-mail nie są już wymagane w interfejsie Firebase. Ułatwi to obsługę użytkowników anonimowych, użytkowników z niestandardowym uwierzytelnianiem lub użytkowników od dostawców, u których adresy e-mail nie są wymagane.

  • Widżet zarządzania kontem

    Ten widżet udostępnia użytkownikom interfejs, który umożliwia zmianę adresów e-mail, zmianę haseł lub odłączenie kont od dostawców tożsamości. Obecnie jest 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 Uwierzytelnianie Firebase API.

  • Brak signOutUrl

    Musisz wywołać metodę firebase.auth.signOut() i obsłużyć wywołanie zwrotne.

  • Brak oobActionUrl

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

  • Dostosowywanie CSS

    FirebaseUI używa stylów Material Design Lite, które dynamicznie dodają animacje Material Design.

Krok 1. Zmień kod serwera

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

    1. Zaimplementuj punkt końcowy do weryfikacji tokena identyfikacji Firebase i ustawiania pliku cookie sesji dla użytkownika. Aplikacja kliencka wysyła token identyfikatora Firebase do tego punktu końcowego.
    2. Jeśli żądanie przychodzące zawiera Twój plik cookie sesji, możesz uznać, że użytkownik został uwierzytelniony. W przeciwnym razie żądanie jest traktowane jako nieuwierzytelnione.
    3. Jeśli nie chcesz, aby którykolwiek z użytkowników utracił istniejące sesje logowania, poczekaj 2 tygodnie, aż wygasną wszystkie tokeny Identity Toolkit, lub przeprowadź podwójną weryfikację 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 pakiet SDK serwera Firebase na swoim serwerze. Jeśli używasz języka, który nie jest obsługiwany przez pakiet SDK serwera Firebase, pobierz bibliotekę weryfikacji tokenów JWT dla swojego środowiska 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 aplikacje na Androida, użytkownicy będą musieli uaktualnić 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 po stronie serwera, która sprawdza token i określa, czy do jego weryfikacji należy użyć pakietu SDK Firebase czy Identity Toolkit. Jeśli masz tylko aplikację internetową, wszystkie nowe żądania uwierzytelniania zostaną przeniesione do Firebase, więc musisz używać tylko metod weryfikacji tokenów Firebase.

Więcej informacji znajdziesz w dokumentacji 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 Dodaj aplikację, a następnie Dodaj Firebase do aplikacji internetowej. Wyświetli się fragment kodu, który inicjuje Firebase.
    3. Skopiuj fragment kodu inicjującego i wklej go na stronie internetowej.
  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ń pakiet SDK Identity Toolkit z aplikacji.

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

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

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

      Nie polegaj wyłącznie na pliku cookie sesji podczas wykonywania operacji poufnych lub wysyłania uwierzytelnionych żądań edycji do serwera. Musisz zapewnić dodatkową ochronę przed sfałszowaniem żądania z innej witryny (CSRF).

      Jeśli Twoja platforma 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łączenie go do każdego żądania (domyślnie wysyłany jest też plik cookie sesji). Następnie możesz 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 identyfikacji 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 są ważne przez 2 tygodnie, lub wydłużyć albo 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ę Authentication (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 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 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ę. Plik konfiguracji google-services.json zostanie pobrany na Twój komputer.

  3. Skopiuj plik konfiguracji do katalogu głównego modułu aplikacji na Androida. Ten plik konfiguracji 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 google-services używa pliku google-services.json, aby skonfigurować aplikację do korzystania z Firebase.

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

    compile 'com.google.firebase:firebase-auth:25.0.0'
    compile 'com.google.android.gms:play-services-auth:22.0.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ń pakiet SDK Identity Toolkit z aplikacji.

Krok 3. Dodaj FirebaseUI do aplikacji

  1. Dodaj do aplikacji FirebaseUI Auth.

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

iOS

Krok 1. Dodaj Firebase do aplikacji

  1. Dodaj do aplikacji pakiet SDK Firebase, uruchamiając 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 następnie Dodaj Firebase do aplikacji na iOS. W oknie Dodaj Firebase podaj identyfikator pakietu aplikacji i identyfikator sklepu z aplikacjami, a następnie kliknij Dodaj aplikację. Plik konfiguracji GoogleService-Info.plist zostanie pobrany na Twój komputer. Jeśli w projekcie masz kilka 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 swojego projektu w 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 Identity Toolkit SDK wywołaniami FirebaseUI.