Есть ли эквивалент для «учетных данных»: «включать» или XMLHttpRequest «с учетными данными» для WebSocket? - PullRequest
0 голосов
/ 12 февраля 2019

Я настраиваю веб-сервис, который обеспечивает как аутентификацию, так и интерфейс WebSocket.API сервера должен быть доступен для междоменных доменов и при этом получать cookie-файлы, установленные для домена сервера.В fetch это возможно с опцией credentials: "include", и она работает хорошо.Есть ли эквивалент для WebSocket?

По сути, у меня сервер Node.js, работающий на a.com:

let app = require("express")()
// ...
//headers
app.use((req, res, next) => {
  console.log(req.headers)
  console.log(req.protocol)
  // Allow multiple origins from config
  let origin = req.headers.origin
  if (config.allowedOrigins.includes(origin)) {
    res.setHeader("Access-Control-Allow-Origin", origin)
  }
  res.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept, Authorization")
  res.setHeader("Access-Control-Allow-Methods", "GET,PUT,POST,PATCH,DELETE")
  res.setHeader("Access-Control-Allow-Credentials", true)
  res.setHeader("Access-Control-Expose-Headers", "X-Total-Count, Link")
  next()
})
// ...
app.ws("/", (ws, req) => {
  const sessionID = req.sessionID // should be the same sessionID for requests from all origins
  // ...
})
// ...

из веб-приложения, размещенного на b.com:

let socket = new WebSocket("wss://a.com") // should include cookie from a.com

Это хорошо работает, когда я тестирую его локально и все работает на localhost, но не работает, когда веб-приложение работает на другом домене.

Я хотел бы иметь возможность, чтобыпользователь входит в систему на a.com, но может использовать тот же сеанс для запроса WebSocket с b.com.

Я благодарен за каждое предложение!

1 Ответ

0 голосов
/ 14 февраля 2019

Я уже понял это.Следующее предполагает, что сторонние куки включены :

По умолчанию, по крайней мере во всех основных браузерах, которые я тестировал, существующие куки будут отправляться с запросом WebSocket.(т.е. именно так, как я этого хотел).Браузер, который я использовал там, где столкнулся с проблемой, - Brave .У храброго, похоже, есть ошибка, что Cookies не добавляются в соединения WebSocket .Так что, во-первых, это была не проблема, а просто ошибка в конкретном браузере, который я использовал.

Когда сторонние файлы cookie блокируются (хотя они по умолчанию в Safari), я неНе думаю, что есть способ достичь того, чего я хотел бы достичь.

...