• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

JWT, zarządzanie sesjami a konieczność potwierdzenia prawdziwości tokenu.

Object Storage Arubacloud
0 głosów
131 wizyt
pytanie zadane 13 kwietnia 2023 w JavaScript przez urogi7 Początkujący (340 p.)
Tokeny JWT zawierają w sobie informacje po to aby ograniczyć ilość zapytań do bazy (to je wyróżnia między innymi od sesji)

Dla bezpieczeństwa użytkowników musze zaimplementować mechanizm zarządzania sesjami z bazą danych- strona która pokazuje na jakich urządzeniach są aktywne sesje i jakie, oraz możliwość skasowania dowolnej / skasowanie wszystkich sesji po zmanie hasla prócz sesji na aktywnym urządzeniu itd.

Jeśli token będzie skasowany/dezaktywowany w bazie danych, muszę przy każdym requescie wymagającym autoryzacji sprawdzić w bazie danych czy dany token jest aktywny, aby nie dopuscic do sytuacji gdzie osoba z unieważnionym tokenem przez manager sesji ma dostęp do treści.

więc przy każdym requescie muszę robić strzał do bazy, co się mija z sensem, bo przy jednym zapytaniu, będą wykonywane 2 requesty (autoryzacyjny + docelowy (np. pobranie listy rzeczy itd.))

i bez znaczenia czy to tokeny JWT, czy sesja, i tak muszę sprawdzać czy dany token jest aktywny w bazie, zamiast bazy danych mogę przechowywać też w pamięci, ale wtedy po restarcie servera wszystkie sesje przepadną.

Czy jest jakiś sensowny sposób na to aby w zarządzaniu sesjami jakąś dezaktywować i zabronić jej dostępu w inny sposob niz sprawdzanie jej stanu dodatkowym requestem przy innym requescie?

1 odpowiedź

+3 głosów
odpowiedź 13 kwietnia 2023 przez Gynvael Coldwind Nałogowiec (27,530 p.)
wybrane 13 kwietnia 2023 przez urogi7
 
Najlepsza

Na szybko ze dwie rzeczy przychodzą mi do głowy, które pewnie można by fajnie połączyć razem:

  1. Wprowadź jakiś identyfikator tokenów (globalnie unikatowy, jakiś UUID czy coś) do tego co wysyłasz w JWT. A potem lokalnie na każdym serwerze trzymaj listę unieważnionych UUIDów (cache unieważnionych tokenów). Przy restarcie serwera pobieraj listę unieważnionych UUIDów z serwera bazy danych. Do tego co jakiś czas (np. co minutę) możesz ten lokalny cache aktualizować (pull) / ew. jeśli masz możliwość, wprowadzić jakiś mechanizm typu push z bazy danych do wszystkich serwerów / ew. mix obu (best effort na push + aktualizacja co jakiś czas).
  2. Wprowadź maksymalny czas życia tokenom, np. na 30 minut. Jeśli token jest starszy niż te 30 minut, to robisz request sprawdzający do bazy, i jeśli wszystko jest OK, to odnawiasz tokenowi czas życia na kolejne 30 minut. Dzięki temu wprowadzasz dość małą liczbę dodatkowych requestów kosztem 30-minutowego okna w którym token mógł zostać unieważniony, ale nadal będzie działać.

A najlepiej połącz oba - to daje stosunkowo szybki czas unieważnienia sesji (minuta lub mniej), a dodatkowo daje możliwość czyszczenia starych wpisów na liście "unieważnionych tokenów" po 30 minutach od ich wrzucenia tam (ofc można to robić np. raz dziennie, zostawiając tylko wpisy unieważnionych tokenów młodsze niż 30 minut).

Konkretne czasy podane wyżej powinieneś dostosować do obciążenia jakie przewidujesz. Np. może czas życia tokenu powinien wynosić 60 minut, a czas aktualizacji lokalnego cache (pull) 5 minut, bo masz mało replik bazy danych i dużo żądań na sekundę.

Ach, i ważne: jeśli robisz listę unieważnionych tokenów, to koniecznie wprowadź UUID; jeśli po prostu będziesz tokeny albo hashe tokenów wrzucać na listę unieważnionych to to da się obejść w JWT z uwagi na pewne detale co do tego jak base64 działa.

Podobne pytania

+3 głosów
1 odpowiedź 589 wizyt
pytanie zadane 16 marca 2022 w JavaScript przez rszczepanski02 Obywatel (1,180 p.)
0 głosów
0 odpowiedzi 128 wizyt
pytanie zadane 14 maja 2019 w JavaScript przez `Krzychuu Stary wyjadacz (13,940 p.)
0 głosów
0 odpowiedzi 161 wizyt

92,545 zapytań

141,387 odpowiedzi

319,503 komentarzy

61,930 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...