Odświeżanie tokenów: Jak to działa?

0

Od niedawna zagłębiam się w mechanizm autentykacji przy pomocy tokenów, a dokładniej json web tokenów. W ramach bezpieczeństwa zawsze lepiej, aby miały krótki czas ważności. Wszystko super, ale mając Web Api i klienta w JS, kiedy klient wykonuje żądania jest potrzeba ich odświeżania, kiedy już wygasają. Przy logowaniu tworzy się token zawierający różne claimsy użytkownika. Wiem, że musi być też drugi token "odświeżający" pozbawiony danych użytkownika. Sytuacja wygląda więc tak, że mam jakiś LoginController zawierający Post, który po sprawdzeniu danych na wejściu i obsłużeniu logiki logowania odpowie zwracając tokeny i date ich wygaśnięcia. Klient w JS zapisze je np. w local storage i zacznie wykonywać jakieś żądania, ale token traci ważność.

  1. Czy zatem powinienem przechowywać w bazie danych token do odświeżania, żeby porównywać czy użytkownik ma poprawny token i jeśli tak to wygenerować mu nowe i zamienić token odświeżający w bazie, a jeśli nie ma w ogóle lub jest nieważny to rzucić 401?
  2. Czy należy używać cachowania tokenów po stronie serwera? Dlaczego tak lub nie?
    Jeśli się gdzieś pomyliłem to proszę o korektę.
0

Mogę się mylić, ale

Generalnie nie ma czegoś takiego jak odświeżanie tokenów, bo jest to niemożliwe. Po prostu generujesz nowy token na nowy przedział czasowy.

Mógłbyś co każdą akcje wymagającą autoryzacji zwracać użytkownikowi nowy token, którym od teraz by się poświadczał.

ale nie jestem specem od sec, więc hf :D

Czy należy używać cachowania tokenów po stronie serwera? Dlaczego tak lub nie?

Dlaczego? przecież zazwyczaj one nie tykają bazy, bo chyba po prostu waliduj się je w locie.

Chociaż z drugiej strony mógłbyś wtedy mieć listę tokenów które Ty wystawiłeś, więc ktoś mając twój secret_key nadal miałby trochę problem.

1

Czy należy używać cachowania tokenów po stronie serwera? Dlaczego tak lub nie?

Koledze pewnie chodzi o to, ze musi robic requesty i zeby nie musial co chwile tworzyc nowych/autoryzowac sie, to chcialby strzelac z tego jednego. Jesli robisz to bezpiecznie i nie wpuszczasz token na klienta to mozesz.

0

Dodatkowo jak robisz jakies rzeczy server-2-server, to fajnie jakbys dodawal dodatkowy secret do requestow i sprawdzaj go na backendzie.

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