Вы правы, токены JWT обычно доступны на стороне клиента через куки или локальное хранилище.Как правило, они содержат информацию с низким уровнем риска, такую как «Контактная информация» или основные сведения о пользователе, так что риск безопасности не слишком велик.
Что касается передачи через строки запроса в Socket.io, даже если это возможноне представляет большого риска, это противоречит лучшей практике - включать любую пользовательскую информацию в удобочитаемом виде, например параметры запроса.
Эта статья имеет аналогичную точку зрения и лучшее решение для вас, если вам интересно:
https://facundoolano.wordpress.com/2014/10/11/better-authentication-for-socket-io-no-query-strings/