asp.net-mvc – SignalR – 使用Windows和匿名身份验证时,连接ID
我使用SignalR 1.0.1作为ASP.NET MVC3应用程序的聊天核心.使用IIS 7.5
MVC控制器中有两种方法可以访问聊天视图: 1.第一种方法是公开的,允许匿名用户聊天 – 没有授权. 2.对于域用户 – 聊天代理,使用[授权]属性限制对第二种方法的访问. 集线器中没有明确指定的授权. 对于这种情况,我在IIS上涉及 Windows和匿名身份验证. 我还实现了自定义角色提供程序,它只在内存中运行 – 不会将任何内容保存到数据库中. 会发生什么情况是在控制器方法中使用'[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 – Azure SignalR服务连接未激活
- iis-7 – 经典asp:错误’800a01ad’ActiveX组件无法创建对
- asp.net-mvc – ASP.net MVC – 显示模板集合
- Asp.Net数据控件引用AspNetPager.dll分页实现代码
- .net核心中的ServicePointManager.DefaultConnectionLimit?
- asp.net-mvc-3 – 从MVC 3中使用Razor View引擎的局部视图渲
- 通过ASP.NET菜单控件禁用javascript生成
- asp.net – 从代码隐藏更改GridView列属性
- asp.net-mvc – 使用jQuery ASP.NET MVC自动保存表单输入
- asp.net-mvc-3 – 另一个数据库实例RavenDB MVC3已经使用的
- asp.net-mvc – 控制器名称是否来自类名?
- asp.net-mvc-3 – 实体框架4.1自动日期
- ASP.Net Web应用程序安全性不适用于IIS 7?
- asp.net-mvc-4 – 使asp.net MVC 4视图编译/给出
- asp.net-mvc – 为Azure Web角色定义缩放阈值
- asp.net-mvc – 我的bin部署MVC4应用程序中的区域
- asp.net-mvc – HandleErrorAttribute无法正常工
- 在ASP.NET MVC中创建全局对象的最佳位置
- 将链接列添加到ASP.NET GridView
- 如何在asp.net webform中使用异步/等待实现异步页