asp.net-mvc – SignalR – 使用Windows和匿名身份验证时,连接ID的格式不正确
|
我使用SignalR 1.0.1作为ASP.NET MVC3应用程序的聊天核心.使用IIS 7.5
会发生什么情况是在控制器方法中使用'[Authorize]’属性会导致来自Hub的500响应,无论是来自授权视图还是来自匿名视图: 请求(发送是发送消息的Hub方法): 响应: Server stack trace: at Microsoft.AspNet.SignalR.PersistentConnection.GetConnectionId(HostContext context,String connectionToken) at Microsoft.AspNet.SignalR.PersistentConnection.ProcessRequest(HostContext context) at Microsoft.AspNet.SignalR.Owin.CallHandler.Invoke(IDictionary2 environment) at Microsoft.AspNet.SignalR.Owin.Handlers.HubDispatcherHandler.Invoke(IDictionary2 environment) at Microsoft.Owin.Host.SystemWeb.OwinCallContext.Execute() at Microsoft.Owin.Host.SystemWeb.OwinHttpHandler.BeginProcessRequest(HttpContextBase httpContext,AsyncCallback callback,Object extraData)<br/><br/> 但请注意,连接到Hub工作正常,返回200 OK: 我在stackoverflow上发现了一些类似的线程: 据我所知,在调用我的Send方法时,Hub正在处理请求,其Identity与用于连接Hub的不同,或者Hub的GetConnectionId发现,该用户实际上没有被授权 – 但它如何检查该假设,在那里在Hub上没有指定授权? 有人可以对此有所了解吗? 提前致谢 :) 解决方法SignalR会同时为您的连接ID和您的Identity签名,以便在每次启动新连接时创建新的connectionToken.然后将此connectionToken作为协商响应的一部分发送到SignalR客户端.每次向SignalR发出请求时,无论是连接,重新连接还是发送请求,SignalR都会验证您的connectionToken是否与客户端的连接ID和身份相匹配. connectionToken本质上是一个CSRF令牌,用于防止运行第三方网站的攻击者秘密代表共享客户端发出SignalR请求.显然,如果您启用了SignalR的跨域支持,这无济于事,但在这种情况下,connectionToken仍然可以正常工作. Taylor’s answer是对的.当客户端的身份发生变化时,您应该停止然后启动SignalR连接.这将强制执行新的协商请求,该请求将为您的客户端提供一个新的连接ID,其中新的connectionToken将与您客户端的更新身份进行签名. 附:服务器发送的事件连接请求没有失败,因为它是在客户端的标识更改之前建立的.仅在收到请求时检查connectionToken,但服务器发送的事件会使响应无限期地保持打开状态. (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – Asp.net MVC TextArea
- asp.net – 设置gridview标题颜色
- asp.net – Microsoft成员提供者与自定义提供者vs完成自定义
- 使用ASP.NET创建缩略图的“最佳”方法是什么?
- 在ASP.NET标记中“使用”等效的命名空间
- ASP.NET MVC中的角色缓存策略
- asp.net-mvc – viewbag和viewstate之间的区别?
- asp.net-mvc – MVC4 jQuery UI不起作用
- asp.net-mvc – 使用默认控制器的ASP.NET MVC路由
- asp.net – NullReferenceException在PipelineStepManager.
- 有没有办法通过ASP.NET和app_offline.htm来显示图
- .net – MVC 5中的“CacheProfile”
- asp.net-mvc-4 – 如何解决Antlr3依赖地狱
- asp.net-mvc – MVC DB首先修复显示名称
- asp.net – 在Google Chrome浏览器中加载两次
- asp.net-mvc-3 – 如何创建通用的MVC3编辑器模板
- asp.net-mvc – 为什么删除:ASP.NET MVC CheckB
- asp.net-mvc – 在ASP.NET MVC中禁用布局?
- asp.net-mvc – 使用Entity FrameWork保存更改/更
- asp.net-mvc – 如何在没有其他操作匹配的情况下
