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.