Jak działa uwierzytelnianie oparte na plikach cookie?


210

Czy ktoś może mi podać krok po kroku opis działania uwierzytelniania opartego na plikach cookie? Nigdy nie robiłem niczego, co dotyczyło zarówno uwierzytelnienia, jak i plików cookie. Co musi zrobić przeglądarka? Co serwer musi zrobić? W jakiej kolejności? Jak dbamy o bezpieczeństwo?

Czytałem o różnych rodzajach uwierzytelniania i o plikach cookie, ale chciałbym podstawowy opis, jak korzystać z tych dwóch razem - przeczytałem tylko, że są one często używane razem, ale nie mogłem znaleźć opisu, w jaki sposób.


Odpowiedzi:


162

Ciasteczko to w zasadzie tylko element słownika. Każdy element ma klucz i wartość. Do uwierzytelnienia kluczem może być „nazwa użytkownika”, a wartością będzie nazwa użytkownika. Za każdym razem, gdy wysyłasz żądanie do strony internetowej, przeglądarka dołącza do żądania pliki cookie, a serwer hosta sprawdza pliki cookie. Tak więc uwierzytelnianie może odbywać się automatycznie.

Aby ustawić plik cookie, wystarczy dodać go do odpowiedzi, którą serwer odsyła po żądaniach. Przeglądarka doda plik cookie po otrzymaniu odpowiedzi.

Istnieją różne opcje, które można skonfigurować po stronie serwera plików cookie, takie jak czasy ważności lub szyfrowanie. Zaszyfrowany plik cookie jest często nazywany plikiem cookie podpisanym. Zasadniczo serwer szyfruje klucz i wartość w elemencie słownika, więc tylko serwer może korzystać z informacji. Zatem ciasteczko byłoby bezpieczne.

Przeglądarka zapisze pliki cookie ustawione przez serwer. W nagłówku HTTP każdego żądania przeglądarki wysłanej do tego serwera doda pliki cookie. Dodają tylko pliki cookie dla domen, które je ustawiają. Witryna example.com może ustawić plik cookie, a także dodać opcje w nagłówku HTTP dla przeglądarek, aby wysłać plik cookie z powrotem do subdomen, takich jak sub.example.com. Niedopuszczalne byłoby, aby przeglądarka kiedykolwiek wysyłała pliki cookie do innej domeny.


Rozumiem, że przeglądarka może wysłać plik cookie z powrotem do tej samej domeny. Czy w związku z tym przeglądarka bierze pod uwagę subdomenę, gdy rozróżnia dwie domeny?
Aakash

1
W nagłówku HTTP można ustawić opcje obsługi subdomen przez przeglądarkę.
Conor Patrick

288

Zdaję sobie sprawę, że to już lata, ale pomyślałem, że mogę rozwinąć odpowiedź Conora i dodać trochę więcej do dyskusji.

Czy ktoś może mi podać krok po kroku opis działania uwierzytelniania opartego na plikach cookie? Nigdy nie robiłem niczego, co dotyczyło zarówno uwierzytelnienia, jak i plików cookie. Co musi zrobić przeglądarka? Co serwer musi zrobić? W jakiej kolejności? Jak dbamy o bezpieczeństwo?

Krok 1: Klient> Rejestracja

Przed wszystkim innym użytkownik musi się zarejestrować. Klient wysyła do serwera żądanie HTTP zawierające swoją nazwę użytkownika i hasło.

Krok 2: Serwer> Obsługa rejestracji

Serwer otrzymuje to żądanie i szyfruje hasło przed zapisaniem nazwy użytkownika i hasła w bazie danych. W ten sposób, jeśli ktoś uzyska dostęp do Twojej bazy danych, nie zobaczy rzeczywistych haseł użytkowników.

Krok 3: Klient> Login użytkownika

Teraz twój użytkownik się loguje. Podaje swoją nazwę użytkownika / hasło i ponownie jest on wysyłany do serwera jako żądanie HTTP.

Krok 4: Serwer> Sprawdzanie poprawności logowania

Serwer wyszukuje nazwę użytkownika w bazie danych, szyfruje dostarczone hasło logowania i porównuje je z wcześniej zakodowanym hasłem w bazie danych. Jeśli się nie wyrejestruje, możemy odmówić im dostępu, wysyłając kod stanu 401 i kończąc żądanie .

Krok 5: Serwer> Generowanie tokena dostępu

Jeśli wszystko się sprawdzi, utworzymy token dostępu, który jednoznacznie identyfikuje sesję użytkownika. Wciąż na serwerze robimy dwie rzeczy z tokenem dostępu:

  1. Zapisz go w bazie danych powiązanej z tym użytkownikiem
  2. Dołącz go do pliku cookie odpowiedzi, aby zwrócić klientowi. Pamiętaj, aby ustawić datę / godzinę wygaśnięcia, aby ograniczyć sesję użytkownika

Odtąd pliki cookie będą dołączane do każdego żądania (i odpowiedzi) między klientem a serwerem.

Krok 6: Klient> Składanie żądań strony

Po stronie klienta jesteśmy teraz zalogowani. Za każdym razem, gdy klient wysyła żądanie strony wymagającej autoryzacji (tzn. Musi się zalogować), serwer uzyskuje token dostępu z pliku cookie i sprawdza go względem tego w bazie danych powiązanej z tym użytkownikiem. Jeśli się sprawdzi, dostęp zostanie przyznany.

To powinno zacząć. Pamiętaj, aby usunąć pliki cookie po wylogowaniu!


10
Dziękuję za opis. Zastanawiam się tylko, w jaki sposób token dostępu zapewnia bezpieczeństwo? Czy osoba atakująca może ukraść plik cookie i udawać uwierzytelnionego zalogowanego użytkownika? Czy to jest chronione przez SSL?
Richeek

6
@Richeek SSL zabezpiecza przechwytywanie podczas żądań / odpowiedzi, ale osoba atakująca może uzyskać dostęp do plików cookie w punktach końcowych (np. W przeglądarce). Teoretycznie mogą one udawać zalogowanego użytkownika do momentu wygaśnięcia pliku cookie. Mówię „teoretycznie”, ponieważ powyższa implementacja tego nie obsługuje. W powyższej implementacji atakujący będzie miał dostęp do momentu zaktualizowania tokena dostępu w bazie danych (tj. Następnego logowania).
pllx

14
Możesz sam unieważnić token dostępu po wygaśnięciu, być może z „datą wygaśnięcia” w swojej bazie danych. Możesz też rozważyć użycie JSON Web Tokeny (JWT) , które są jak tokeny dostępu, ale mogą między innymi obsługiwać wygaśnięcie tokenu. Więcej o JWT tutaj. Atakujący nadal będzie miał dostęp do twojego konta przez krótki czas, jeśli będzie miał token dostępu / JWT, więc powinieneś także zabezpieczyć swoje punkty końcowe.
pllx

3
Długo zajęło mi to, aby podziękować! Dziękuję za wyjaśnienie
Richeek

4
@ManuChadha możesz wraz z tokenem / kluczem sesji zapisać również adres IP użytkownika wraz z innymi parametrami identyfikacyjnymi, takimi jak agent użytkownika itp. Jeśli żądanie zawiera poprawny plik cookie, ale z niewłaściwego adresu IP, przeglądarki itp. odrzuć żądanie i przekieruj użytkownika na stronę logowania w celu ponownego uwierzytelnienia.
FalcoGer,

18

Uwierzytelnianie na podstawie plików cookie

Uwierzytelnianie oparte na plikach cookie działa normalnie w tych 4 krokach -

  1. Użytkownik podaje nazwę użytkownika i hasło w formularzu logowania i klika Zaloguj się.
  2. Po wysłaniu żądania serwer sprawdza poprawność użytkownika na wewnętrznej bazie danych, wysyłając zapytanie do bazy danych. Jeśli żądanie jest prawidłowe, utworzy sesję przy użyciu informacji użytkownika pobranych z bazy danych i zapisze je, dla każdej sesji tworzony jest unikalny identyfikator o nazwie identyfikator sesji, domyślnie identyfikator sesji jest przekazywany klientowi przez przeglądarkę.
  3. Przeglądarka prześle ten identyfikator sesji przy każdym kolejnym żądaniu, identyfikator sesji zostanie zweryfikowany w bazie danych, na podstawie tej strony internetowej identyfikator sesji zidentyfikuje sesję należącą do klienta, a następnie umożliwi dostęp do żądania.

  4. Gdy użytkownik wyloguje się z aplikacji, sesja jest niszczona zarówno po stronie klienta, jak i po stronie serwera.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.