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.
Zgłęb OIDC oraz zarządzanie sesjami. Naucz się implementować wylogowanie przez RP, IdP oraz wylogowanie w kanale zwrotnym dla bezpiecznego zarządzania sesjami.
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.
Aby lepiej zrozumieć zarządzanie sesjami i statusem uwierzytelnienia użytkownika w OIDC, przyjrzyjmy się krótko przepływowi uwierzytelnienia OIDC dla aplikacji internetowej:
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ę.
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.
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ę.
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.
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.)
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.
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.
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.
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.