Zabezpiecz swoją aplikację z Firebase Authentication

Aleksander Patschek

Czas czytania: 2 min
Liczba słów: 415
Data: 06-04-2021
Udostępnij:

Bezpieczeństwo aplikacji webowych to ważny temat. Nie chcemy w końcu, by dowolna osoba miała uprawnienia administratora. W 90% przypadków w naszej aplikacji potrzebujemy mechanizmu autoryzacji i uwierzytelniania. Możemy do tego celu wykorzystać Firebase Authentication.

Autoryzacja vs uwierzytelnienie

Te pojęcia lubią się mylić - dlatego najpierw szybka powtórka.

  • Uwierzytelnienie - potwierdzenie swojej tożsamości
  • Autoryzacja - potwierdzenie dostępu do konkretnych informacji

I szybki przykład: Użytkownik może być uwierzytelniony w systemie i z niego korzystać, ale jeśli nie ma roli admina, to nie przejdzie autoryzacji, by móc np.: obejrzeć logi z systemu.

Metody uwierzytelniania w Firebase Authentication

Główną zaletą Fireabse Authentication jest dostęp do wielu metod uwierzytelniania. Wśród najczęściej wykorzystywanych znajdziemy:

  • email + password
  • Google
  • Facebook

Dzięki temu, że są już one zaimplementowane w Firebase, to zyskujemy wiele możliwości. Po pierwsze nie musimy się przejmować poprawną implementacją lub aktualizacją biblioteki. Po drugie możemy zawsze dołożyć kolejną metodę logowania i nie będzie to skomplikowane (o ile zaimplementujemy to poprawnie).

Konfiguracja Firebase Authentication

Zanim będziemy mogli zrobić coś w kodzie, to musimy wejść do panelu Firebase i aktywować nasze metody uwierzytelniania. Najprościej zacząć od zwykłej kombinacji email + password.

dostępne metody logowania i rejestracji w firebase

Rzecz, której mi brakuje to możliwość zdefiniowania własnej polityki co do hasła. Jedyna walidacja, jaka występuje to długość hasła - musi być min 6 znaków. Jeśli chcemy mieć bardziej restrykcyjne zasady, to musimy zrobić to samodzielnie w kodzie FE lub (lepiej) na backendzie.

Mając aktywną tę metodę, możemy przejść do kodu.

Firebase Authentication w kodzie

W kodzie będziemy wykonywać 3 główne operacje:

  • rejestracja nowych użytkowników
  • logowanie użytkowników
  • wylogowywanie

I do każdej z tych operacji mamy osobną metodę. Najpierw rejestracja:

const result = await firebase.auth().createUserWithEmailAndPassword(email, password)

return result.user;

Po rejestracji użytkownik jest już uwierzytelniony i może np.: uzyskać dostęp nowych widoków. To samo możemy uzyskać poprzez logowanie.

const result = await firebase.auth().signInWithEmailAndPassword(email, password);

return result.user;

No i najprostsze na koniec - wylogowanie

const res = await firebase.auth().signOut();

Warto też jeszcze w tym miejscu zobaczyć co widzimy z poziomu admina. A właściwie czego nie widać. Nie widzimy hasła użytkownika. I jest to bardzo dobra wiadomość.

lista użytkowników w panelu firebase

Na koniec zostaje jeszcze wykorzystać mechanizm uwierzytelniania, by zabezpieczyć dane.

Zabezpieczanie danych dla zalogowanych użytkowników.

Uwierzytelnianie wprowadzamy, by chronić część danych. Aby to zrobić trzeba skorzystać z tzw.: Security Rules. Decydują one czy będziemy w stanie wykonać operację na danych. Security Rules są dosyć rozbudowane i pozwalają na tworzenie zaawansowanych polityk. Poniżej jest tylko prosty przykład, jak można to wykorzystać.

allow read: if true;
allow write: if request.auth != null;

W tej polityce na odczyt danych zezwalamy wszystkim - odczyt jest publiczny. Natomiast zapis, czyli tworzenie i edycja danych będzie już dostępny tylko dla zalogowanych użytkowników. Co się stanie, gdy spróbujemy sami coś zapisać? Dostaniemy poniższy błąd.

FirebaseError: Missing or insufficient permissions.
Jeśli podoba Ci się moja twórczość, to dołącz do newslettera WebDev News. Znajdziesz tam jeszcze więcej wiedzy i ciekawych artykułów, które pomogą Ci w karierze  WebDev News - newsletter tworzony przez programistę dla programistów