JSON Web Token - działanie

0

Zastanawiam się nad działaniem JWT, opiszę to na przykładzie.

Uderzam na jakiś endpoint i otrzymuję okienko logowania, wpisuje dane i przesyłam, dane się zgadzają i serwer zwraca mi token, który później przesyłam w headerze, żeby móc skorzystać z jakiś zasobów. Teraz pytania:

  1. Co jeśli ktoś przejmie dokładnie ten token, który otrzymałem? Będzie mógł korzystać z zasobów? W jaki sposób wygląda ochrona w takim przypadku?
  2. Na czym polega secret w cześci signature? W jaki sposób to chroni?
  3. Dlaczego w sumie token nie jest encrypted a tylko i wyłącznie encoded?
  4. W jaki sposób serwer ropoznaje, że token jest prawdziwy i pochodzi od właściwej osoby? Np ktoś dla testu mi da swój token i będę mógł z niego skorzystać?

Z góry dzięki za odpowiedzi

0
  1. Jeśli przejmie token, to może się podszyć pod daną sesję. Sposoby zabezpieczenia to:
  • krótko żyjące sesje, jeśli token jest ważny 15 minut, to ciężej jest zrobić coś groźnego
  • TLS na protokole komunikacyjnym
  • do sesji użytkownika używanie ciastek a nie JWT (by zabezpieczyć się przed XSS)
  1. Secret jest używany do obliczenia sumy kontrolnej, która z kolei zabezpiecza przed zmianami w tokenie.
  2. A po co? Ideą JWT jest to, że klient również może odczytać z niego dane, ale nie może ich zmienić, po to jest pkt. 2.
  3. Serwer rozpoznaje czy token jest poprawny przy pomocy pkt. 2. ale nie ma możliwości sprawdzenia czy pochodzi od uprawnionej osoby, bo tego się nie da zrobić. Token jest właśnie tym uprawnieniem, więc jak komuś go dasz, to dla systemu będzie on tobą. Zasada działania identyczna jak klucza do sejfu.
0

dobrze jest ustawić sobie, żeby token był zapisywany w sessionStorage zamiast localStorage, dzięki temu token jest usuwany z pamięci po zamknięciu okna przeglądarki

0

Do tokenu można napakowć różnych danych takich jak np.ip czy user agent i atakujący będzie w dupie.

0
[hauleth napisał(a)]:

I użytkownik też jak mu się zmieni IP lub zaktualizuje przeglądarkę

Fakt IP może być zły pomysł ale z user_agent to lepiej

0

Czy sesja np. 12h to poważna podatność?

0
Wielki Szewc napisał(a):

Czy sesja np. 12h to poważna podatność?

tfu, czas życia tokena, a nie sesja.

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