Uwierzytelnianie a autoryzacja: porządkujemy pojęcia

W tym wpisie zagłębiamy się w podstawowe pojęcia bezpieczeństwa w sieci: uwierzytelnianie i autoryzację. Choć często używa się ich zamiennie, oba procesy pełnią w ochronie zasobów cyfrowych różne role. Uwierzytelnianie weryfikuje tożsamość użytkownika, czyli sprawdza, czy jest tym, za kogo się podaje, a autoryzacja określa, co uwierzytelniony użytkownik może zrobić. Przyjrzymy się, jak działają te mechanizmy, dlaczego są tak ważne dla bezpieczeństwa aplikacji i czym się od siebie różnią. Niezależnie od tego, czy masz za sobą lata w branży, czy dopiero zaczynasz przygodę z bezpieczeństwem aplikacji webowych, zrozumienie tych podstaw jest kluczowe, jeśli chcesz budować bezpieczne i wydajne rozwiązania.

Uwierzytelnianie a autoryzacja

Uwierzytelnianie i autoryzacja to dwa ważne pojęcia z obszaru bezpieczeństwa, które często stosuje się zamiennie, choć znaczą co innego.

  • Uwierzytelnianie to proces weryfikacji tożsamości użytkownika lub usługi. To pierwszy krok w zabezpieczaniu strony lub aplikacji.
  • Autoryzacja to proces ustalania, do czego użytkownik lub usługa ma dostęp. To drugi krok w zabezpieczaniu strony lub aplikacji i opiera się na uwierzytelnianiu.

Metody uwierzytelniania

Tożsamość użytkownika lub usługi można zweryfikować na wiele sposobów. Do najpopularniejszych metod należą:

  • Hasła: Hasła to najczęściej stosowana metoda uwierzytelniania. To prosty i skuteczny sposób weryfikacji tożsamości użytkownika, ale bywają podatne na ataki brute force i phishing.
  • Uwierzytelnianie dwuskładnikowe (2FA): 2FA dodaje dodatkową warstwę bezpieczeństwa, bo wymaga od użytkownika podania dwóch różnych składników. Może to być hasło i kod z aplikacji uwierzytelniającej na telefonie albo hasło i odcisk palca.
  • Single sign-on (SSO): SSO pozwala uwierzytelnić się jednym zestawem danych logowania, a potem korzystać z wielu stron lub aplikacji bez ponownego logowania. To wygodny sposób na poprawę bezpieczeństwa, ale może też stanowić zagrożenie, jeśli dostawca SSO zostanie przejęty.

Przyjrzyjmy się przykładowemu procesowi uwierzytelniania i autoryzacji w aplikacji webowej korzystającej z Auth0, z frontendem w React i backendem w Node.js.

Przykładowy przepływ uwierzytelniania

Krok 1: Uwierzytelnianie użytkownika w React

1. Logowanie użytkownika: Użytkownik klika przycisk logowania w aplikacji React.
2. Uwierzytelnianie w Auth0: Aplikacja za pomocą Auth0 React SDK przekierowuje użytkownika na hostowaną przez Auth0 stronę logowania.
3. Dane logowania: Użytkownik podaje swoje dane (nazwę użytkownika i hasło) albo loguje się przez dostawcę społecznościowego (np. Google, Facebook).
4. Pobranie tokenów: Po udanym uwierzytelnieniu Auth0 przekierowuje użytkownika z powrotem do aplikacji React, przekazując token dostępu i token ID.
5. Ustanowienie sesji: Aplikacja React bezpiecznie przechowuje tokeny i ustanawia sesję użytkownika.

Krok 2: Dostęp do chronionych zasobów przez backend w Node.js

1. Żądanie do API: Użytkownik próbuje uzyskać dostęp do chronionego zasobu, a aplikacja React wysyła żądanie do backendu w Node.js, dołączając token dostępu w nagłówku authorization.
2. Walidacja tokenu: Backend w Node.js waliduje token dostępu za pomocą bibliotek Auth0.
3. Autoryzacja: Po zwalidowaniu tokenu backend sprawdza, czy token ma uprawnienia (scopes) wymagane do uzyskania dostępu do żądanego zasobu.
4. Dostęp do zasobu: Jeśli użytkownik ma odpowiednie uprawnienia, backend udostępnia mu chroniony zasób.

Czym jest sesja?

Sesje logowania

Sesja logowania to okres, w którym użytkownik jest uwierzytelniony i ma uprawnienia dostępu do strony lub aplikacji. Sesjami logowania można zarządzać na kilka sposobów. Najpopularniejsze z nich to:

  • Ciasteczka: Ciasteczka to małe pliki zapisywane na urządzeniu użytkownika, które służą do śledzenia jego stanu zalogowania. Są wygodnym sposobem zarządzania sesjami logowania, ale ich kradzież stanowi zagrożenie.
  • Tokeny sesji: Tokeny sesji to unikalne identyfikatory generowane przez stronę lub aplikację, które służą do śledzenia stanu zalogowania użytkownika. Są bezpieczniejsze od ciasteczek, ale bywają też trudniejsze w obsłudze.

Rodzaje sesji logowania

Wyróżniamy dwa główne rodzaje sesji logowania:

  • Trwałe sesje logowania: Trwałe sesje logowania przetrwają zamknięcie przeglądarki i obowiązują, dopóki nie wygasną albo użytkownik się nie wyloguje, często przez dni lub tygodnie. Właśnie to daje pole "Zapamiętaj mnie".
  • Nietrwałe sesje logowania: Nietrwałe sesje logowania kończą się po zamknięciu przeglądarki lub po okresie bezczynności, na przykład po 30 minutach lub godzinie. To częsty wybór w aplikacjach wrażliwych, takich jak bankowość internetowa.

Podsumowanie

Podsumowując, uwierzytelnianie i autoryzacja to dwa ważne pojęcia z obszaru bezpieczeństwa, które służą ochronie stron i aplikacji. Metod uwierzytelniania jest wiele, a sesjami logowania można zarządzać na różne sposoby. Najlepszy sposób zabezpieczenia strony lub aplikacji zależy od konkretnych potrzeb organizacji.

aktualizacja:

Zajrzyj do mojego najnowszego wpisu, jeśli chcesz poznać czołowe narzędzia do uwierzytelniania. Omawiam w nim cztery nowoczesne technologie: Clerk, Supabase, Auth0 i Auth.js, pokazując, co potrafią i jak mogą przydać się w Twoich projektach.