Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Node.js: WebSocket, authentication, authorization, token, handshake

Какие существуют способы передачи авторизации в WebSocket?

Вопрос проверяет знание механизмов аутентификации и авторизации при установке WebSocket-соединения, что важно для безопасности реального времени.

Короткий ответ

Основные способы: передача токена в URL при инициализации (например, ?token=...), в заголовках (Authorization), в теле первого сообщения после открытия соединения, или через cookie. Самый распространённый — передача JWT в query-параметрах или заголовках во время рукопожатия (handshake).

Длинный ответ

Способы передачи авторизации в WebSocket

WebSocket-соединение начинается с HTTP-рукопожатия (handshake), что даёт возможность использовать стандартные HTTP-механизмы аутентификации. После установки соединения протокол не поддерживает заголовки, поэтому авторизацию нужно передавать либо на этапе handshake, либо в первом сообщении.

Основные подходы

  • Query-параметры URL: Токен передаётся в строке запроса, например ws://example.com/socket?token=abc123. Просто, но токен может попасть в логи сервера.
  • Заголовки при handshake: Используется заголовок Authorization: Bearer <token>. Безопаснее, но не все WebSocket-клиенты поддерживают кастомные заголовки.
  • Cookie: Если cookie установлены ранее (например, после логина), они автоматически отправляются при handshake. Удобно, но требует настройки SameSite и защиты от CSRF.
  • Первое сообщение: После открытия соединения клиент отправляет JSON с токеном. Сервер проверяет его и либо принимает, либо закрывает соединение. Гибко, но добавляет задержку.

Пример на Node.js (библиотека ws)

const WebSocket = require('ws');
const server = new WebSocket.Server({ port: 8080 });

server.on('connection', (socket, req) => {
  // Извлекаем токен из query-параметров
  const url = new URL(req.url, 'http://localhost');
  const token = url.searchParams.get('token');
  
  if (!token || !validateToken(token)) {
    socket.close(1008, 'Unauthorized');
    return;
  }
  
  console.log('Authenticated client connected');
});

Вывод

Выбор способа зависит от требований безопасности и инфраструктуры. Для большинства приложений достаточно передавать JWT в query-параметрах или заголовках при handshake. Если нужна дополнительная защита от перехвата, используйте WSS (WebSocket Secure) и короткоживущие токены.

Frontend developer

tech
tech
tech
tech
tech
tech
tech
tech
tech

Ментор по Frontend

Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства

Записаться на консультацию

Уровень

  • Рейтинг:

    4

  • Сложность:

    5

Навыки

  • Node.js

    Node.js

  • Networks

Ключевые слова

#WebSocket

#authentication

#authorization

#token

#handshake

Подпишись на React Developer в телеграм

Frontend developer

tech
tech
tech
tech
tech
tech
tech
tech
tech

Ментор по Frontend

Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства

Записаться на консультацию