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ść.
- 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?
- 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ę.