Implementacja wylogowania OIDC i zarządzania sesjami: Kompletny przewodnik
Zgłęb OIDC oraz zarządzanie sesjami. Naucz się implementować wylogowanie przez RP, IdP oraz wylogowanie w kanale zwrotnym dla bezpiecznego zarządzania sesjami.
Czym jest zarządzanie sesjami OIDC
OpenID Connect (OIDC) to prosta warstwa identyfikacji zbudowana na protokole OAuth 2.0. Umożliwia klientom weryfikację tożsamości użytkownika końcowego na podstawie uwierzytelnienia przeprowadzonego przez serwer autoryzacji oraz uzyskiwanie podstawowych informacji o profilu użytkownika końcowego w sposób interoperacyjny i przypominający REST.
OIDC jest zaprojektowany tak, aby był łatwy w użyciu i wdrożeniu, z naciskiem na prostotę i elastyczność. Jest szeroko stosowany do logowania jednokrotnego (SSO) i weryfikacji tożsamości w aplikacjach internetowych, mobilnych i interfejsach API.
Zrozumienie statusu uwierzytelnienia i zarządzania sesjami w OIDC jest kluczowe. Ten artykuł wyjaśnia, jak zarządzane są sesje OIDC i status uwierzytelnienia użytkowników w kontekście interakcji między Dostawcą Tożsamości (IdP) a Stroną Polegającą (RP) lub Dostawcą Usług (SP).
Artykuł zawiera kilka kluczowych terminów.
- Dostawca Tożsamości (IdP): Usługa, która przechowuje i uwierzytelnia tożsamości użytkowników.
- Dostawca Usług (SP) lub Strona Polegająca (RP): Aplikacja internetowa lub usługa, która świadczy usługi użytkownikom i polega na IdP w celu uwierzytelnienia użytkownika.
- Sesja logowania lub Sesja uwierzytelnienia: Sesja, która jest nawiązywana, gdy użytkownik loguje się do IdP.
- Grant: Centralizowane informacje o uwierzytelnieniu i autoryzacji użytkownika, które są generowane i zarządzane przez IdP.
- Logowanie jednokrotne (SSO): Usługa sesji i uwierzytelnienia użytkownika, która pozwala użytkownikowi używać jednego zestawu danych logowania (np. nazwa i hasło) do uzyskania dostępu do wielu aplikacji.
Jak działa przepływ uwierzytelnienia OIDC
Aby lepiej zrozumieć zarządzanie sesjami i statusem uwierzytelnienia użytkownika w OIDC, przyjrzyjmy się krótko przepływowi uwierzytelnienia OIDC dla aplikacji internetowej:
- Użytkownik uzyskuje dostęp do aplikacji internetowej (RP).
- RP przekierowuje użytkownika do dostawcy OIDC (IdP) w celu uwierzytelnienia.
- Dostawca OIDC sprawdza status sesji logowania użytkownika. Jeśli sesja nie istnieje lub wygasła, użytkownik zostaje poproszony o zalogowanie.
- Użytkownik wchodzi w interakcję ze stroną logowania, aby się uwierzytelnić.
- Strona logowania przesyła wynik interakcji do dostawcy OIDC.
- Dostawca OIDC tworzy nową sesję logowania i grant uwierzytelnienia dla użytkownika.
- Dostawca OIDC przekierowuje użytkownika z powrotem do RP z kodem uwierzytelnienia (Przepływ Kodów Autoryzacyjnych).
- RP otrzymuje kod uwierzytelnienia i wymienia go na tokeny do uzyskania informacji o użytkowniku.
Czym jest zarządzanie sesją logowania RP
Sesja logowania jest ustanawiana, gdy użytkownik loguje się do IdP. Ta sesja jest używana do śledzenia statusu uwierzytelnienia użytkownika w IdP. Sesja zazwyczaj zawiera informacje takie jak tożsamość użytkownika, czas uwierzytelnienia i czas wygaśnięcia sesji. Jest tworzona, gdy użytkownik loguje się po raz pierwszy i jest utrzymywana do momentu wylogowania użytkownika lub wygaśnięcia sesji.
W przeglądarce użytkownika zostanie bezpiecznie ustawione ciasteczko sesyjne, aby utrzymać stan sesji. Ciasteczko sesyjne służy do identyfikowania sesji użytkownika i uwierzytelniania użytkownika przy kolejnych żądaniach uwierzytelnienia. To ciasteczko jest zazwyczaj ustawiane z flagami HttpOnly
i Secure
, aby zapobiec dostępowi ze strony klienta i zapewnić bezpieczną komunikację.
Jedna sesja dla pojedynczego RP
Dla każdego RP, do którego użytkownik uzyskuje dostęp z różnych urządzeń lub przeglądarek, zostanie ustanowiona oddzielna sesja logowania użytkownika. Oznacza to, że status uwierzytelnienia użytkownika jest utrzymywany oddzielnie dla każdego RP. Jeśli użytkownik się wyloguje z jednego RP, nadal będzie uwierzytelniony w innych RP, dopóki sesja nie wygaśnie lub użytkownik nie wyloguje się ze wszystkich RP.
Centralizowana sesja dla wielu RP
To centralizowane zarządzanie sesją pozwala również IdP utrzymywać spójny stan uwierzytelnienia w wielu RP, o ile sesja użytkownika jest aktywna i żądania uwierzytelnienia pochodzą od tego samego agenta użytkownika (urządzenia/przeglądarki). Ten mechanizm umożliwia funkcje SSO, w których użytkownik może uzyskać dostęp do wielu RP bez konieczności ponownego logowania się.
Status uwierzytelnienia po stronie klienta
W OIDC aplikacja kliencka (RP) polega na tokenach wydanych przez IdP w celu weryfikacji tożsamości użytkownika i statusu uwierzytelnienia lub autoryzacji. "Sesja logowania" po stronie klienta jest utrzymywana przez tokeny wydane przez IdP.
- Token ID: Krótkoterminowy token, który zawiera informacje o użytkowniku i jest używany do weryfikacji tożsamości uwierzytelnionego użytkownika.
- Token dostępu: Token, który zapewnia dostęp do chronionych zasobów w imieniu użytkownika. Okres życia tokena dostępu może być krótko- lub długoterminowy, w zależności od konfiguracji. Aplikacje klienckie mogą polegać na ważności tokena dostępu, aby określić status uwierzytelnienia użytkownika. Jeśli token dostępu wygasł lub został usunięty, użytkownik może być uważany za "wylogowanego" lub "nieautoryzowanego" i musi ponownie się uwierzytelnić.
- Token odświeżania: Jeśli zażądano i przyznano zakres
offline_access
, aplikacja kliencka może otrzymać token odświeżania. Zapewnia on możliwość przedłużenia statusu uwierzytelnienia użytkownika bez konieczności ponownego uwierzytelnienia użytkownika. Aplikacja kliencka może użyć tokena odświeżania, aby uzyskać nowy token dostępu po wygaśnięciu bieżącego tokena dostępu. Dopóki token odświeżania jest ważny, status uwierzytelnienia użytkownika może być utrzymywany bez potrzeby interakcji użytkownika.
Połączenie tych tokenów pozwala aplikacji klienckiej utrzymywać status uwierzytelnienia użytkownika i uzyskiwać dostęp do chronionych zasobów w imieniu użytkownika. Aplikacja kliencka musi bezpiecznie przechowywać te tokeny i zarządzać ich cyklem życia. (Np. dla aplikacji SPA tokeny mogą być przechowywane w lokalnej pamięci przeglądarki lub w pamięci sesji. Dla aplikacji internetowych tokeny mogą być przechowywane w danych sesji po stronie serwera lub ciasteczkach.)
Mechanizmy wylogowania OIDC
Proces wylogowania w OIDC to wieloaspektowy koncept z powodu zaangażowania zarówno centralizowanych sesji logowania zarządzanych przez IdP, jak i rozproszonych tokenów po stronie klienta.
Czyszczenie tokenów i lokalnej sesji po stronie klienta
Aby wylogować się lub unieważnić status uwierzytelnienia użytkownika po stronie klienta, należy po prostu usunąć przechowywane tokeny (token ID, token dostępu i token odświeżania) z przeglądarki użytkownika lub pamięci. Ta akcja skutecznie unieważnia status uwierzytelnienia użytkownika po stronie klienta.
Dla aplikacji internetowych, które zarządzają własnymi sesjami logowania użytkowników, mogą być potrzebne dodatkowe kroki. Należy wtedy wyczyścić ciasteczko sesyjne i wszelkie dane sesji (takie jak tokeny wydane przez Dostawcę Tożsamości lub IdP), aby upewnić się, że użytkownik został w pełni wylogowany.
Czyszczenie centralizowanej sesji logowania w IdP
IdP utrzymuje centralizowaną sesję logowania dla każdego użytkownika. Dopóki ta sesja jest aktywna, użytkownik może być automatycznie ponownie uwierzytelniany, nawet jeśli tokeny po stronie klienta zostały usunięte, co pozwala na wydawanie nowych tokenów dla aplikacji klienckiej bez konieczności dalszej interakcji z IdP.
Aby w pełni wylogować użytkownika z IdP, aplikacja kliencka (RP) może zainicjować żądanie wylogowania do IdP. Aplikacja (RP) powinna przekierować użytkownika do punktu końcowego zakończenia sesji IdP, aby zakończyć sesję logowania i wyczyścić ciasteczko sesyjne. To zapewnia pełne wylogowanie we wszystkich aplikacjach (RP) dzielących tę samą centralizowaną sesję. Gdy sesja logowania zostanie zakończona, za każdym razem, gdy IdP otrzyma żądanie tokena od dowolnego powiązanego RP dzielącego tę samą sesję, IdP poprosi użytkownika o ponowne uwierzytelnienie.
Wylogowanie w kanale zwrotnym OIDC
W niektórych przypadkach, gdy użytkownik wylogowuje się z jednej aplikacji (RP), może również chcieć zostać automatycznie wylogowany ze wszystkich innych aplikacji (RP) bez dodatkowej interakcji użytkownika. Można to osiągnąć za pomocą mechanizmu wylogowania w kanale zwrotnym.
Gdy IdP otrzymuje żądanie wylogowania od RP, nie tylko czyści sesję logowania, ale także wysyła powiadomienie o wylogowaniu w kanale zwrotnym do wszystkich RP używających tej samej sesji i mających zarejestrowany punkt końcowy wylogowania w kanale zwrotnym.
Gdy RP otrzymuje powiadomienie o wylogowaniu w kanale zwrotnym, mogą podjąć niezbędne działania, aby wyczyścić sesję i tokeny użytkownika, upewniając się, że użytkownik jest w pełni wylogowany ze wszystkich aplikacji.