Пользователи входят в систему через интерфейс, а серверная часть устанавливает:
- (HttpOnly, Secure, SameSite)
Код: Выделить всё
access_token - (HttpOnly)
Код: Выделить всё
refresh_token
Для обычных 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: {}
};
}
Поэтому внутри моего фильтра шлюза это не удается:
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
Мобильная версия