Czy dobrze rozumiem różnicę między uwierzytelnianiem za pomocą tokenów a sesji?

1

Rozumiem to w taki sposób.

Za pomocą tokenów:
Untitled Diagram22.drawio.png

Za pomocą sesji:
Untitled Diagram.drawio (4).png

czyli wychodzi na to, że jakie są główne plusy tokenów nad sesją?

  • nie trzeba odpytywać wspólnego źródła o to czy zalogowany poprawnie, sami sobie walidują token

minusy?

  • nie da się wylogować użytkownika
  • trzeba dekompilować token ciągle
1

Nie do końca. Jeżeli przez token rozumiemy JWT lub podobny mechanizm, to różnica polega na tym w jaki sposób zarządzamy uprawnieniami użytkownika i gdzie są przechowywane informacje.

Sesja

Mamy dwóch bohaterów: użytkownika i serwis.

Użytkownik loguje się za pomocą loginu i hasła. Po stronie serwisu tworzymy obiekt – sesję, identyfikator sesji jest przekazywany w komunikacji z użytkownikiem, a wewnątrz serwisu masz kilka opcji. Pierwsza to przekazywanie identyfikatora sesji każdorazowa weryfikacja, czy użytkownik może coś zrobić czy nie w danym µSerwisie. Druga to stworzenie czegoś w rodzaju API Gateway, które będzie weryfikować uprawnienia użytkownika i przez które przechodzi cały ruch. Trzecie, to wygenerowanie tokenu z informacjami o użytkowniku i przesyłanie go między µSerwisami.

W tym podejściu to serwis ma wszystkie potrzebne informacje o użytkowniku i to on wewnętrznie zarządza uprawnieniami. W dodatku to na serwisie leży odpowiedzialność za bezpieczeństwo.

Wylogowanie polega na usunięciu sesji.

Token

Tutaj mamy trzech bohaterów: użytkownika, serwis i usługę uwierzytelniania (dalej UU).

Użytkownik loguje się w UU, a ta przekazuje token zawierający informacje czy to do niego czy to do serwisu. Nadal w komunikacji wewnętrznej przekazujemy sobie token. Tak samo jak w komunikacji z użytkownikiem.

Różnica polega na tym gdzie przechowywane są dane o użytkowniku i kto nimi zarządza. UU może być zewnętrzne lub wewnątrz organizacji. Serwis będzie miał wszystkie potrzebne informacje w tokenie. Jednak użytkownik może, o ile ma dostęp do UU, ograniczyć informacje dostępne dla serwisu. Serwis nie przechowuje też żadnych danych użytkownika związanych z uprawnieniami.

Wylogowanie w takim układzie polega na usunięciu tokenu I powiadomieniu UU, że token jesty już nieważny. Dodatkowo tokeny mają swój czas życia i wygasają jeżeli nie zostaną odnowione.

0

Różnica na abstrakcyjnym poziomie, polega na tym gdzie są przechowywane dane sesji. Czy odbywa się to po stronie serwera, czy po stronie klienta. Pominąłeś tutaj też podstawową zaletę tokenów - bezstanowość serwera. Pomyśl że każdy zalogowany użytkownik, to konieczność trzymania na serwerze jego sesji (przynajmniej id, może i jakichś dodatkowych danych), co jeżeli zamiast pojedynczej instancji każdego z tych mikroserwisów (w tym api gateway) masz tych instancji wiele? Co jeżeli pojawiają się i znikają? Co jeżeli dzieje się to w środowisku rozproszonym geograficznie?

1 użytkowników online, w tym zalogowanych: 0, gości: 1