【问题标题】:How to create SignalR Groups at runtime如何在运行时创建 SignalR 组
【发布时间】:2017-02-24 21:01:16
【问题描述】:

我开始创建一个应用程序,我将使用 SignalR 使其实时工作。该应用要做的一件事是只允许与某些已连接的客户端进行通信,仅允许与某个组中的客户端通信。

正如我在一些示例中看到的,我应该让客户端向服务器发送一个组名,然后将用户连接 ID 添加到一个组中,然后我只能向其中的用户发送数据与连接的客户端相同的组。

所以我的问题是,例如,想象一个学校聊天应用程序,我希望只有一个班级的法律学生可以访问该班级的聊天组,所以我想传递给加入组的 GroupName 应该不会被更改,并且我希望它不会显示给查看页面源代码的某些用户,我将如何做这样的事情?

我想在渲染 Razor 页面时,我会获取一些有关用户及其所属组的信息,并创建一个加密密钥,该密钥将在服务器上解密以将用户添加到正确的组,它会工作吗?但问题是每个连接的用户的加密密钥都是相同的,因为输入总是相同的,对吧?每个连接的密钥不会不同,因此有些人可以获得密钥并对其进行解密...

所以我想要一些类似于 BCrypt Hash 的东西,它可以为相同的输入生成不同的输出,但我希望能够反转服务器上的密钥以将用户添加到正确的组中。

知道我该怎么做这样的事情吗??

【问题讨论】:

  • 用户在使用聊天时是否经过身份验证?在这种情况下,解决方案很简单,但我只是要求在实际回答问题之前确认
  • 是的,他们是经过认证的。就像,我扫描一个二维码,所以我可以访问一个“房间”,每个房间都有某种管理员,他们实际上必须登录,他们将能够与房间的客户和其他房间的管理员
  • 并且应该有一个选项,管理员可以直接与其中一位客户私下交谈。

标签: javascript jquery asp.net encryption signalr


【解决方案1】:

来自您的 cmets:

我扫描一个二维码,所以我可以访问一个“房间”

假设 QR 码具有隐式房间 ID,当用户/客户端连接到服务器时,您可以将连接 ID 或用户名映射到特定房间 ID 或信号器组名称。

该地图可能是服务器上的静态ConcurrentDictionary。 但你是在谈论加密的东西。在我看来,安全很重要。在这种情况下,任何有权访问 QR 码的人都可以进入房间,这根本不安全除非您在用户连接后禁用 QR 访问权限。

如果您确实需要保护房间/群组访问权限,则应该对每个用户进行身份验证和持久化。然后服务器准确地知道谁在连接,并能够自动分配一个房间(signalR 组)。

【讨论】:

  • 二维码将由管理员生成,并且应该只在一段时间内有效,比如 60 秒,然后,它不应该用于进入房间,而是使用该二维码的用户进入的qr不应该断开,直到管理员这么说。
  • 我想过类似的事情,用户使用代码登录,然后我将它的访问令牌保存到数据库或其他东西,然后它应该可以访问,直到管理员如何撤销访问令牌。因此,登录时我应该添加房间 ID 并访问 qr 右侧的“密码”。但是我应该如何每次生成不同的代码,仍然指向同一个房间
  • 二维码是服务端管理员生成的,所以服务端可以将生成的二维码映射到房间id。换句话说,二维码和房间id之间应该有关系(只是在服务器上)。然后当用户使用该代码登录时,服务器知道要加入哪个房间/组
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-09-12
  • 1970-01-01
  • 1970-01-01
  • 2010-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多