gpt4 book ai didi

c# - SignalR 自定义连接 ID

转载 作者:太空宇宙 更新时间:2023-11-03 23:47:02 28 4
gpt4 key购买 nike

我们知道可以使用自定义 IUserIdProvider 设置新连接的 ID。

public string GetUserId(IRequest request)
{
var context = request.GetHttpContext();
...
}

此方法必须返回新的连接 ID。我的 Web 应用程序架构很简单:

当使用连接时,应用程序生成可以从 javascript 变量访问的 guid(字符串)。然后在内部使用生成的 guid。所以问题是我如何将附加变量传递给 signalR 请求以在 GetUserId 方法中使用它。谢谢!

最佳答案

首先,让我们澄清一些术语。当您设置 custom IUserIdProvider您实际上并没有更改客户端的连接 ID,而是更改了客户端的用户 ID。

客户端的连接 ID 始终是 SignalR 在每个连接启动时随机生成的 GUID。这是无法更改的。要从给定连接 ID 的集线器向客户端发送消息,您可以编写:Clients.Client(connectionId).myMethod(...)

默认情况下,客户端的用户 ID 是用户的 IPrincipal.Identity.Name,但这可以根据自定义 IUserIdProvider 进行更改。与连接 ID 不同,用户 ID 可以由多个连接共享。可能发生这种情况的常见情况是,当单个用户在多个浏览器选项卡中打开使用 SignalR 的应用程序时。要从给定用户 ID 的集线器向用户发送消息,您可以编写:Clients.User(userId).myMethod(...)

要回答您的问题,您可以set a query string parameter这将与您可以在 GetUserId 方法中读取的每个 SignalR 请求一起发送。请注意,攻击者可以轻松地将自己的查询字符串设置为他们想要的任何内容。如果您不小心设计应用,这可能会导致冒充用户。

关于c# - SignalR 自定义连接 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27312672/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com