• token
  • oidc
  • token odświeżania
  • token dostępu
  • token ID

Zrozumienie tokenów dostępu, tokenów odświeżania i tokenów ID w protokole OpenID Connect (OIDC)

Protokół OpenID Connect (OIDC) stał się szeroko przyjętym standardem zarządzania tożsamością. Ale czy naprawdę rozumiesz role i atrybuty tych tokenów?

Charles
Charles
Developer

OIDC, OAuth 2.0 i tokeny

Protokół OpenID Connect, znany również jako OIDC, stał się szeroko przyjętym standardem zapewniającym podstawowe ramy zarządzania tożsamością. Jest to warstwa uwierzytelniania zbudowana na dobrze znanym protokole OAuth 2.0. Podczas gdy OAuth 2.0 służy wyłącznie do autoryzacji zasobów, OIDC jest protokołem, który standaryzuje i wzmacnia uwierzytelnianie klientów przy pomocy nowo wprowadzonego tokenu ID.

Czekaj... Być może słyszałeś o tokenach dostępu i tokenach odświeżania w erze OAuth, a teraz pojawia się nowa koncepcja w OIDC? Czy naprawdę rozumiesz różnice między tymi tokenami?

Czym są tokeny dostępu, tokeny odświeżania i tokeny ID w OIDC?

Zacznijmy od praktycznego scenariusza.

Wyobraź sobie, że rozwijasz typową aplikację klient-serwer i komunikują się ze sobą za pomocą API RESTful. Chcesz, aby większość twoich API była prywatna, umożliwiając dostęp tylko autoryzowanym klientom. Będziesz potrzebować mechanizmu do uwierzytelniania klienta i autoryzowania żądań API do twojego serwera.

Idealnie, twoje API RESTful powinny być bezstanowe, co oznacza, że serwer nie powinien przechowywać żadnych informacji o sesji klienta. Za każdym razem, gdy przychodzi ważne żądanie, serwer powinien po prostu odpowiedzieć danymi. To tutaj wchodzą w grę tokeny. Więc jaki rodzaj tokenu powinieneś używać w takim przypadku?

Tokeny dostępu służą do ochrony twoich API

W OAuth 2.0 i OIDC, każde chronione API traktowane jest jako zasób. Token dostępu jest tokenem, który klient przesyła do serwera podczas żądania zasobu API, zazwyczaj poprzez nagłówek żądania i w formacie JWT.

Po stronie serwera, za każdym razem gdy przychodzi żądanie, serwer musi jedynie zweryfikować, czy przychodzące żądanie zawiera ważny token dostępu. Proces weryfikacji zwykle obejmuje dekodowanie tokenu JWT, weryfikację podpisu i czasu wygaśnięcia, a także zakresu uprawnień, aby upewnić się, że klient ma niezbędne pozwolenia.

Możesz się jednak zastanawiać: Jeśli moja aplikacja kliencka może mieć ważny token dostępu po pomyślnym logowaniu i używać tokenu dostępu do żądań API serwera, czy to nie wystarczy? Dlaczego potrzebuję innych tokenów?

To naprawdę ważne pytanie, i wyjaśnimy to krok po kroku.

Dlaczego potrzebujemy tokenów odświeżania?

Chociaż technicznie tokeny dostępu spełniają minimalne wymagania do działania systemu, ze względu na względy bezpieczeństwa ważność tokenów dostępu jest zwykle bardzo krótka (zazwyczaj godzina). Wyobraź sobie, że mamy tylko tokeny dostępu, użytkownicy końcowi musieliby się ponownie uwierzytelniać za każdym razem, gdy token dostępu wygasa. Dla nowoczesnych aplikacji jednoskładnikowych (SPA) i zwłaszcza aplikacji mobilnych, częste wylogowywanie się to dość bolesne doświadczenie użytkownika, mimo że po prostu staramy się chronić ich bezpieczeństwo użytkownika.

Dlatego potrzebujemy równowagi między bezpieczeństwem tokenów a wygodą użytkowania. Dlatego właśnie wprowadzono tokeny odświeżania.

Dlaczego tokeny odświeżania mogą mieć dłuższą żywotność?

Tokeny dostępu są używane do dostępu do zasobów API, więc ich krótki czas życia pomaga zminimalizować ryzyko wycieku lub kompromitacji. Z drugiej strony, ponieważ tokeny odświeżania są używane tylko do wymiany na nowe tokeny dostępu, nie są używane tak często jak tokeny dostępu i dlatego ryzyko ich ujawnienia jest mniejsze. Dlatego też dłuższy okres ważności jest uważany za akceptowalny dla tokenów odświeżania.

Zapewnienie bezpieczeństwa tokenu odświeżania

Ponieważ token odświeżania jest również przechowywany po stronie klienta, zapewnienie, że nie zostaną skompromitowane, jest wyzwaniem, zwłaszcza dla klientów publicznych, takich jak aplikacje jednoskładnikowe (SPA) i aplikacje mobilne.

W Logto, tokeny odświeżania mają automatyczny mechanizm rotacji włączony domyślnie, co oznacza, że serwer autoryzacji wydaje nowy token odświeżania, gdy spełni on kryteria:

  • Aplikacje jednoskładnikowe: Rozpoznawane jako klienci niezwiązani z nadawcą, te aplikacje wymagają rotacji tokenu odświeżania. Czas życia tokenu odświeżania nie może być określony.
  • Aplikacje natywne i tradycyjne aplikacje webowe: Rotacja tokenu odświeżania jest automatycznie włączona, automatycznie odnawiana po osiągnięciu 70% jego okresu ważności. Dowiedz się więcej

Chociaż nadal masz możliwość wyłączenia rotacji tokenu odświeżania na stronie szczegółów aplikacji w konsoli administracyjnej, zdecydowanie zaleca się zachowanie tego środka ochrony.

Czym jest token ID i dlaczego jest ważny?

Token ID to unikalna cecha OIDC, która dostarcza informacji o tożsamości uwierzytelnionego użytkownika.

Podczas gdy tokeny dostępu są używane do dostępu do chronionych zasobów, a tokeny odświeżania służą do uzyskiwania nowych tokenów dostępu, tokeny ID są zazwyczaj używane do kachowania informacji o użytkowniku po stronie klienta, zmniejszając potrzebę składania dodatkowych żądań do serwera autoryzacji w celu uzyskania danych użytkownika. W większości przypadków można nawet powiedzieć, że posiadanie tokenu ID jest równoznaczne z uwierzytelnieniem użytkownika.

Najlepsze praktyki dotyczące obsługi tokenów

  • Używaj HTTPS: Zawsze używaj HTTPS do zabezpieczania komunikacji między klientem a serwerem autoryzacji. To zapobiega przechwytywaniu i kradzieży tokenów przez nieautoryzowane osoby.
  • Ustal odpowiedni czas wygaśnięcia tokenu: Tokeny dostępu powinny mieć krótki czas życia, aby zminimalizować ryzyko ich ujawnienia. Tokeny odświeżania mogą mieć dłuższy okres ważności.
  • Włącz rotację tokenu odświeżania: Zaimplementuj rotację tokenu odświeżania, aby zminimalizować ryzyko wycieku tokenu odświeżania.
  • Używaj szczegółowej kontroli dostępu: Używaj szczegółowych zakresów, aby ograniczyć uprawnienia tokenów dostępu. Wnioskuj tylko o uprawnienia niezbędne dla aplikacji klienckiej. Unikaj używania zakresów "all" lub "admin", które omijają większość sprawdzania uprawnień, chyba że jest to absolutnie konieczne.

Podsumowanie: kluczowe różnice między tokenami dostępu, tokenami odświeżania a tokenami ID w OIDC

W protokole OIDC tokeny odświeżania, tokeny dostępu i tokeny ID współpracują, aby zapewnić bezpieczne i bezproblemowe uwierzytelnianie użytkowników.

  • Tokeny dostępu zapewniają autoryzację dostępu do chronionych zasobów.
  • Tokeny odświeżania eliminują potrzebę interwencji użytkownika w przypadku nowych tokenów dostępu.
  • Tokeny ID zapewniają przechowywanie informacji o użytkowniku po stronie klienta, co zwiększa wydajność.

Zrozumienie roli i znaczenia tych tokenów jest kluczowe dla programistów implementujących uwierzytelnianie OIDC w swoich aplikacjach.