Когда откроете вторую вкладку нужен будет новый session token, который будет автоматически выдан используя refresh token. А это значит, что предыдущий нужно инвалидировать. И даже без инвалидами может получиться ситуация гонки, когда refresh token меняется между запросами и Вам выдаётся по несколько токенов подряд
Если содержимое JWT Вам не нужно на клиенте (а зачем тогда JWT?), то можно просто ставить его как httponly cookie и отлавливать ошибки при API запросах.
Это то, что Вам возвращает GitHub/Google/Facebook после того, как пользователь залогиниться в их сервисе. Потом auth code меняется на auth token, который и используется для выполнения API запросов на том провайдеру, который выдал auth token. Это стандартный OAuth flow. Вы читали те ссылки, что я кидал ранее?
А ещё passport можно убрать, так как он ничего полезного не делает. Тем более в образовательных целях будет намного полезнее разобраться как работает OAuth2 flow без всяких библиотек.