SignalR定制连接ID
问题描述:
正如我们所知道的新连接的ID可以使用自定义IUserIdProvider
被设置好的。SignalR定制连接ID
public string GetUserId(IRequest request)
{
var context = request.GetHttpContext();
...
}
此方法必须返回新的连接ID。 我的web应用程序的体系结构是简单的:
时使用连接时,应用程序生成GUID(字符串)可以通过从JavaScript变量acessed。然后在内部使用生成的guid。所以问题是我怎么能通过附加变量signalR请求在GetUserId
方法中使用它。 谢谢!
答
首先,让我们澄清一些术语。当您设置custom IUserIdProvider时,您实际上并未更改客户端的连接ID,而是更改了客户端的用户ID。
客户端的连接ID始终是当每个连接启动由SignalR随机生成一个GUID。这不能改变。要从给定其连接ID的集线器向客户端发送消息,您需要编写:Clients.Client(connectionId).myMethod(...)
。
默认情况下,客户端的用户ID是用户的IPrincipal.Identity.Name
,但可以根据自定义IUserIdProvider
更改该值。与连接标识不同,用户标识可以由多个连接共享。发生这种情况的一种常见情况是单个用户使用SignalR在多个浏览器选项卡中打开的应用程序。要从给定用户标识的集线器向用户发送消息,您需要编写:Clients.User(userId).myMethod(...)
。
要回答您的问题,您可以将set a query string parameter与每个SignalR请求一起发送,您可以在GetUserId
方法中阅读这些请求。请注意,攻击者可以轻松地将自己的查询字符串设置为任何他们想要的。如果你不注意如何设计你的应用程序,这可以使模仿用户成为可能。
的感谢!我喜欢它会有所帮助 – user2598575 2014-12-06 12:11:44