我开发ASP。默认情况下,使用SignalR 2.0.3与Websocket传输聊天。我使用"Authorize"属性对hub进行授权。
[Authorize]
[HubName("c")]
public class Chat : Hub
{
...
我遇到了下一个问题。清除浏览器(Chrome或Firefox)中的所有cookie后,授权仍然成功。它仅为WebSockets传输再现。我试图解决这个问题使用所以HubPipelineModule:
public class CheckingCookiesPipelineModule : HubPipelineModule
{
protected override bool OnBeforeIncoming(IHubIncomingInvokerContext context)
{
if (context.Hub.Context.Request.Cookies["auth_key"].Value == string.Empty)
{
return false;
}
return base.OnBeforeIncoming(context);
}
}
它没有帮助,因为cookie不是Websocket请求中的空的。有谁能解释SignalR Websocket如此奇怪的行为吗?是bug还是特性?也许有变通的办法?
WebSocket是持久连接,它们总是处于连接状态。cookie在连接握手期间发送,而不是在每条消息中发送。
如果你关闭了连接,当你再次连接时,cookie应该是空的。