Храни JWT в httpOnly и secure куке, так безопаснее всего. На сервере Next.js ты спокойно читаешь куку и подставляешь токен в fetch-запросы к Nest. Для Socket.IO сделай отдельный API-эндпоинт: он читает куку, проверяет токен и возвращает клиенту временный токен. Клиент получает его и подключается к сокету. Основной токен остаётся в куке, и в браузер напрямую не попадает. Хранить токен в localStorage или прокидывать в props не стоит