Как аутентифицировать соединение WebSocket, когда access_token хранится в файлах cookie HttpOnly? (Весенний облачный шлюJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Как аутентифицировать соединение WebSocket, когда access_token хранится в файлах cookie HttpOnly? (Весенний облачный шлю

Сообщение Anonymous »

Я создаю микросервисную архитектуру на основе WebSocket, используя Spring Cloud Gateway и STOMP WebSockets.

Пользователи входят в систему через интерфейс, а серверная часть устанавливает: Фронтенд не может прочитать эти файлы cookie (как и ожидалось).

Для обычных HTTP-запросов все работает нормально — файлы cookie HttpOnly автоматически отправляются при каждом запросе на шлюз.
🚨 Проблема
Когда я пытаюсь подключиться к конечной точке WebSocket:

Код: Выделить всё

const client = new Client({
webSocketFactory: () => new WebSocket('ws://localhost:8090/ws-chat'),
connectHeaders: {
Cookie: `access_token=${TOKEN}` //  {
System.out.println(exchange.getRequest().getCookies());
// Result: {}
};
}
Поскольку внешний интерфейс не может получить доступ к файлам cookie HttpOnly, я не могу прикрепить токен доступа к запросу установления связи WebSocket.
Поэтому внутри моего фильтра шлюза это не удается:

String accessToken = request.getCookies().getFirst("access_token").getValue();
// access_token имеет значение null => NullPointerException
❓ Вопрос
Как настоящие приложения, такие как WhatsApp, Telegram и т. д., обрабатывают аутентификацию WebSocket, когда токен хранится в файлах cookie HttpOnly и интерфейс не может его прочитать?
В частности:
  • Как я могу безопасно аутентифицировать WebSocket соединения через шлюз?
  • Как передать данные аутентификации во время рукопожатия CONNECT, когда JS браузера не может читать файлы cookie?
  • Существует ли шаблон (например, временный токен WS, подтверждение сеанса и т. д.), который мне следует реализовать?


Подробнее здесь: https://stackoverflow.com/questions/798 ... n-httponly
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»