我正在尝试使用kerberos身份验证向服务器打开websocket,在握手期间出错(错误代码:400); 我看到它不可能通过Web套接字发送凭据,我要做的是通过Web套接字cookie设置用户名和密码,服务器将读取它们。 那么如何为Web套接字设置cookie? 谢谢,
答案 0 :(得分:0)
您可以使用document.cookie = xxxx
设置常规Cookie的方式为webSocket连接设置Cookie。所有webSocket连接都以HTTP请求(带有升级标头)开头,并且您要连接的域的cookie将与初始HTTP请求一起发送以打开webSocket。
因此,只要您将webSocket连接到与您的网页相同的域,那么您只需为该网页设置一个cookie,它将与webSocket连接请求一起发送。并且,与其他Cookie一样,您可以使用here on MDN所述的document.cookie
设置Cookie。
答案 1 :(得分:0)
这取决于浏览器。如果cookie与初始HTTP请求一起启动WebSocket连接时到达,则可以实现处理cookie,但是如果您不能要求用户使用Safari(Safari会发送带有WebSocket打开请求的cookie,而不是Chrome,Chrome不会发送) ,您可能必须实现一种机制,让客户端在带内发送会话标识符。
一种简单的实现方法是,客户端代码将会话标识符作为响应open
事件的第一条消息发送,而服务器代码将第一条传入消息的内容解释为会话Cookie ,以设置适当的特权上下文(或者,如果cookie未知,或者如果不对其承载不授予特权,则可能关闭连接)。
或者,如果您的WebSocket协议具有某种结构化的消息基础结构,则可以定义用于将会话cookie传递到服务器的特定消息类型,以及服务器的匹配响应类型,以使客户端知道它的内容。想到了cookie。
像在ws://example.com/service?SESSION=123456
中一样,可能很想在URI参数中传递会话cookie。这在原型制作中就足够了,但在生产中可能不建议这样做,因为通常应将会话cookie视为比处理从Web服务器请求的URI列表习惯的更为敏感。以这种方式传递会话Cookie可以在短期内起作用,但可能会通过诸如粗心的分析技术而增加意外暴露的风险。在某些其他情况下,可以通过在请求的主体中传递敏感标识符(例如,作为所谓的POST
参数)来缓解此问题,但是WebSocket打开请求不能具有非空主体。