是否可以通过WebSocket握手传递cookie跨域?

时间:2019-12-09 17:03:02

标签: javascript cookies websocket cross-domain

上下文:

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

我们在应用程序中引入了WebSocket连接,并通过授权来保护它,我们在握手时添加了cookie检查。 (XHR请求是通过Authorization标头授权的,此处不使用cookie;但是实际上使用了canWebSocket interface仅允许limited组标头,如果我们不授权,通过WS消息,cookie似乎是唯一的理智选择;嗯,事实上,我无法确定在没有浏览器标准提示的情况下是否可以实现基本HTTP身份验证,以及如何做到这一点)

问题:

这实际上可以用于生产(当前端和后端在同一个域上时),并且cookie在Cookie头内的握手请求中发送(代码很简单:我只是在获取后设置cookie auth令牌),这在开发环境(另一个域上的localhost +后端)中不起作用:Cookie头仅在握手中不存在。 link above表明XHR需要withCredentials选项才能尝试跨cookie传递。但是,对于WS是否有类似的东西,我还没有找到确切的答案。 Here类似问题的作者假设没有这样的东西,但是真的是这样吗?

2 个答案:

答案 0 :(得分:1)

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

我遇到了同样的问题,以为没有发送cookie,因为chrome检查器没有在websocket连接请求中显示它们,但是一旦您将它们标记为相同的站点{{1} }和none

或者,要快速检查是否是问题所在,可以在secure中禁用SameSite要求

答案 1 :(得分:-1)

在另一个项目上,我学习了一种“正确”的方法来处理此问题。通常,更高级别的协议与WS一起使用,例如STOMP协议。它具有auth的特定实现,因此实际上不需要cookie。它对CORS没有任何缺点。