WebSocket握手不能跨域传递cookie吗?

Yak*_*ovL 6 javascript cookies cross-domain websocket

语境:

我正在本地开发一个前端应用程序,跨域调用 API 等(从本地主机开发服务器到本地网络内另一台计算机上的服务器)。由于我们本地网络是隔离的,后端服务器启用了CORS,不会造成安全问题;这在生产中有所不同(CORS 被禁用)。

我们在应用程序中引入了 WebSocket 连接,为了通过授权保护它,我们在握手时添加了 cookie 检查。(XHR 请求通过 Authorization 标头进行授权,那里不使用 cookie;但实际上可以使用它们;WebSocket接口只允许有限的标头集,如果我们不通过 WS 消息进行授权,cookie 似乎是唯一明智的选择;好吧,事实上我没能找到是否可以在没有浏览器标准提示的情况下实现基本 HTTP 身份验证,以及如何做到这一点)

问题:

虽然这实际上适用于生产(当前端和后端位于同一域时),并且 cookie 在标头内的握手请求中发送Cookie(代码很简单:我只是在获取身份验证令牌后设置 cookie),但这并不无法在开发环境中工作(本地主机+另一个域上的后端):Cookie握手中不存在标头。上面的链接显示XHR需要withCredentials尝试跨域传递cookie的选项;然而,我还没有找到一个明确的答案,即 WS 是否有类似的东西。这里类似问题的作者只是假设不存在这样的事情,但事实真的如此吗?

小智 2

仔细检查您正在使用的 cookie 是否设置为 SameSite=None 并且是secure

我遇到了同样的问题,认为 cookie 没有被发送,因为 chrome 检查器没有在 websocket 连接请求上显示它们,但一旦你用相同的站点nonesecure.

或者,要快速检查这是否是问题所在,您可以禁用该SameSite要求chrome://flags/