Powiem, jak jest to w Firebase, bo wydaje mi się, że programiści Google się na tym znają.
Przy uwierzytelnieniu dostaje się 2 tokeny, tak jak pisałeś access i refresh, które są ważne tylko przez godzinę. Idea jest taka by przechowywać tylko access token, bo w razie jego wykradnięcia, haker będzie miał dostęp do danych tylko do upłynięcia godziny i nie będzie miał, możliwości by ten czas przedłużyć. Natomiast gdyby wykradł refresh token to mógłby mieć już dostęp na zawsze, bo wystarczy, że co godzinę generowałby nowy.
Dlatego bardzo ważne jest, by w razie konieczności przechowywania także refresh tokena dobrze go zabezpieczyć, jakoś umiejętnie zaszyfrować, czy coś tego typu, myślę, że ktoś to lepiej napisze jak go przechowywać.
Odnośnie pytania, wydaje mi się, że zaraz po dostaniu tokena ustawienie jakiegoś setTimeout nie jest złym rozwiązaniem(oczywiście jeżeli ta funkcjonalność jest potrzebna)