Zarządzanie sesjami OIDC
Ten artykuł wyjaśnia, jak zarządzane są sesje OIDC i status uwierzytelnienia użytkownika w kontekście interakcji między IdP a SP.
Co to jest zarządzanie sesjami OIDC
OpenID Connect (OIDC) to prosta warstwa tożsamości zbudowana na protokole OAuth 2.0. Pozwala klientom na weryfikację tożsamości użytkownika końcowego na podstawie uwierzytelnienia przeprowadzonego przez serwer autoryzacji, a także na uzyskanie podstawowych informacji profilowych o użytkowniku końcowym w interoperacyjnym i podobnym do REST sposobie.
OIDC jest zaprojektowany, aby być łatwym 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, aplikacjach mobilnych i 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żytkownika w kontekście interakcji między Dostawcą Tożsamości (IdP) a Zaufaną Stroną (RP) lub Dostawcą Usług (SP).
Ten 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 Zaufana Strona (RP): Aplikacja internetowa lub usługa, która zapewnia usługi użytkownikom i polega na IdP do uwierzytelniania użytkowników.
- Sesja logowania lub Sesja uwierzytelnienia: Sesja, która jest nawiązana, gdy użytkownik loguje się do IdP.
- Grant: Centralne 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żytkowników, która pozwala użytkownikowi na użycie jednego zestawu poświadczeń (np. nazwy i hasła) do uzyskania dostępu do wielu aplikacji.
Jak działa przepływ uwierzytelnienia OIDC
Aby lepiej zrozumieć zarządzanie sesjami OIDC i statusem uwierzytelnienia użytkownika, przyjrzyjmy się krótko przepływowi uwierzytelniania OIDC dla aplikacji webowej:
- Użytkownik uzyskuje dostęp do aplikacji webowej (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 jest proszony o zalogowanie.
- Użytkownik wchodzi w interakcję ze stroną logowania, aby zostać uwierzytelnionym.
- 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 kodu autoryzacji).
- RP odbiera kod uwierzytelnienia i wymienia go na tokeny, aby uzyskać dostęp do informacji o użytkowniku.
Co to jest zarządzanie sesją logowania RP
Sesja logowania jest ustanawiana, gdy użytkownik loguje się do IdP. Ta sesja służy 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 po raz pierwszy się loguje i jest utrzymywana do momentu wylogowania użytkownika lub wygaśnięcia sesji.
Ciasteczko sesji zostanie bezpiecznie ustawione w przeglądarce użytkownika, aby utrzymać stan sesji. Ciasteczko sesji jest używane do identyfikacji sesji użytkownika i uwierzytelniania użytkownika dla kolejnych żądań uwierzytelnienia. Ciasteczko to zazwyczaj jest ustawiane z flagami HttpOnly
i Secure
, aby zapobiec dostępowi po stronie klienta i zapewnić bezpieczną komunikację.
Jedna sesja dla jednego 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 wyloguje się z jednego RP, nadal będzie uwierzytelniony w innych RP do momentu wygaśnięcia sesji lub wylogowania ze wszystkich RP.
Centralna sesja dla wielu RP
To centralne zarządzanie sesją pozwala również IdP na utrzymanie spójnego stanu uwierzytelnienia w wielu RP, tak długo jak sesja użytkownika jest aktywna, a żądania uwierzytelnienia pochodzą od tego samego agenta użytkownika (urządzenia/przeglądarki). Mechanizm ten umożliwia funkcje SSO, w którym użytkownik może uzyskać dostęp do wielu RP bez ponownego logowania.
Status uwierzytelnienia po stronie klienta
W OIDC aplikacja kliencka (RP) polega na tokenach wydanych przez IdP, aby zweryfikować tożsamość użytkownika oraz status uwierzytelnienia lub autoryzacji. "Sesja logowania" po stronie klienta jest utrzymywana przez tokeny wydane przez IdP.
- Token tożsamości (ID Token): Krótkotrwały token, który zawiera informacje o użytkowniku i jest używany do weryfikacji tożsamości uwierzytelnionego użytkownika.
- Token dostępu (Access Token): Token, który przyznaje dostęp do chronionych zasobów w imieniu użytkownika. Okres ważności tokena dostępu może być krótkotrwały lub długoterminowy, w zależności od konfiguracji. Aplikacje kliencie 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ć uznawany za "wylogowanego" lub "nieuwierzytelnionego" i musi ponownie się uwierzytelnić.
- Token odświeżania (Refresh Token): Jeśli zakres
offline_access
jest żądany i przyznany, aplikacja kliencka może otrzymać token odświeżania. Daje on możliwość przedłużenia statusu uwierzytelnienia użytkownika bez konieczności ponownego uwierzytelnienia. Aplikacja kliencka może użyć tokena odświeżania, aby uzyskać nowy token dostępu, gdy obecny token dostępu wygasł. Tak długo jak token odświeżania jest ważny, status uwierzytelnienia użytkownika może być utrzymywany bez potrzeby interakcji z użytkownikiem.
Kombinacja tych tokenów pozwala aplikacji kliencie na utrzymanie statusu uwierzytelnienia użytkownika i dostęp do chronionych zasobów w imieniu użytkownika. Aplikacja kliencka musi bezpiecznie przechowywać te tokeny i zarządzać ich cyklem życia. (Np. W przypadku aplikacji SPA tokeny mogą być przechowywane w lokalnej pamięci przeglądarki lub pamięci sesji. W przypadku aplikacji webowych tokeny mogą być przechowywane w danych sesyjnych po stronie serwera lub ciasteczkach.)
Mechanizmy wylogowania OIDC
Proces wylogowania w OIDC jest koncepcją wieloaspektową z powodu zaangażowania zarówno centralnych sesji zarządzanych przez IdP, jak i rozproszonych tokenów po stronie klienta.
Usunięcie tokenów i lokalnej sesji po stronie klienta
Wylogowanie lub odwołanie statusu uwierzytelnienia użytkownika po stronie klienta jest stosunkowo proste. Aplikacja kliencka może usunąć przechowywane tokeny (token tożsamości, 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 webowych, które zarządzają własnymi sesjami logowania użytkownika, mogą być konieczne dodatkowe kroki. Obejmują one usunięcie ciasteczka sesji i jakichkolwiek danych sesji (takich jak tokeny wydane przez Dostawcę Tożsamości, IdP), aby upewnić się, że użytkownik jest w pełni wylogowany.
Usunięcie centralnej sesji logowania w IdP
IdP utrzymuje centralną sesję logowania dla każdego użytkownika. Tak długo, jak ta sesja jest aktywna, użytkownik może być automatycznie ponownie uwierzytelniony nawet jeśli tokeny po stronie klienta zostały usunięte, co pozwala na wydanie nowych tokenów dla aplikacji klienckiej bez potrzeby 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 końcowego punktu sesji IdP, aby zakończyć sesję logowania i usunąć ciasteczka sesji. Zapewnia to całkowite wylogowanie ze wszystkich aplikacji (RP) współdzielących tę samą centralną sesję. Gdy sesja logowania jest zakończona, za każdym razem, gdy IdP otrzyma żądanie tokena od dowolnego powiązanego RP, które współdzielą tę samą sesję, IdP poprosi użytkownika o ponowne uwierzytelnienie.
Wylogowanie po kanale zwrotnym OIDC
W niektórych przypadkach, gdy użytkownik wylogowuje się z jednej aplikacji (RP), może również chcieć zostać automatycznie wylogowany z wszystkich innych aplikacji (RP) bez żadnej dodatkowej interakcji z użytkownikiem. Można to osiągnąć za pomocą mechanizmu wylogowania po kanale zwrotnym.
Kiedy IdP otrzymuje żądanie wylogowania od RP, nie tylko usuwa sesję logowania, ale także wysyła powiadomienie o wylogowaniu po kanale zwrotnym do wszystkich RP używających tej samej sesji i mających zarejestrowany punkt wylogowania po kanale zwrotnym.
Kiedy RP otrzymują powiadomienie o wylogowaniu po kanale zwrotnym, mogą podjąć niezbędne działania, aby usunąć sesję i tokeny użytkownika, zapewniając pełne wylogowanie użytkownika ze wszystkich aplikacji.