Как вы определили, SPA не должен выдаваться с токеном обновления.Как только поток OAuth будет завершен, они получат токены, которые могут быть либо сохранены в файле cookie, либо в локальном хранилище (что лучше между ними? Ну, есть много аргументов за и против. Я предпочитаю локальное хранилище).
При доступесрок действия токена истек, вы должны повторно запросить авторизацию на сервере авторизации.Этот запрос по определению протокол OAuth включает client_id и redirect_url .Когда сервер получает запрос, он сначала проверяет эти параметры, чтобы определить действительность клиента.Только тогда он решит запросить логин или использовать куки для определения состояния входа в систему.Так определяется ваш SPA.
Кроме того, один важный момент.Если ваш сервер авторизации поддерживает OpenID Connect, то вы можете использовать параметр prompt = none в запрос авторизации .Это называется быстрым входом в систему, который должен работать, если на сервере авторизации ранее зарегистрирован пользовательский файл cookie, связанный с браузером.Хотя это происходит с OpenID Connect, в зависимости от реализации вы можете использовать этот параметр и с OAuth.
Если все механизмы не работают, к сожалению, ваш SPA должен повторно войти в систему.