【发布时间】:2020-04-02 19:51:35
【问题描述】:
上下文:
我正在本地开发前端应用程序,跨域调用 API 等(从本地主机开发服务器到本地网络内另一台机器上的服务器)。由于我们的本地网络是隔离的,因此后端服务器启用了 CORS,不会导致安全问题;这在生产中有所不同(CORS 已禁用)。
我们在我们的应用程序中引入了 WebSocket 连接,为了通过授权保护它,我们在握手时添加了 cookie 检查。 (XHR 请求是通过 Authorization 标头授权的,此处不使用 cookie;但实际上使用了 can;WebSocket interface 只允许 limited 一组标头,如果我们不通过 WS 消息授权,cookie 似乎成为唯一理智的选择;好吧,事实上我没有找到是否可以在没有浏览器标准提示的情况下实现基本 HTTP 身份验证,以及如何做到这一点)
问题:
虽然这实际上适用于生产(当前端和后端在同一个域上时),并且 cookie 在 Cookie 标头内的握手请求中发送(代码很简单:我只是在获得身份验证后设置了 cookie令牌),这在开发环境中不起作用(本地主机 + 另一个域上的后端):Cookie 标头在握手中不存在。 link above 表明XHR 需要withCredentials 选项来尝试跨域传递cookie;但是,对于 WS 是否有类似的东西,我还没有找到明确的答案。 Here 一个类似问题的作者只是假设没有这样的事情,但真的是这样吗?
【问题讨论】:
-
我没有任何见解可提供,但我遇到了同样的问题。我花了一整天的时间搜索,似乎找不到任何解决方法来允许您为 CORS websocket 请求传递 cookie。似乎我们必须像通常用于 websockets 一样依赖浏览器来传递 cookie,但浏览器不会这样做,除非您明确告诉它(通常使用您提到的 withCredentials 选项)
-
@SharpLizard 好吧,我们最终在开发环境中为 WS 停用了身份验证;我会说使用 WS 消息本身而不是 cookie 来实现身份验证会更加一致
标签: javascript cookies websocket cross-domain