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方法中阅读这些请求。请注意,攻击者可以轻松地将自己的查询字符串设置为任何他们想要的。如果你不注意如何设计你的应用程序,这可以使模仿用户成为可能。

+0

的感谢!我喜欢它会有所帮助 – user2598575 2014-12-06 12:11:44