我开始创建应用程序,并且我将使用SignalR使其实时工作。该应用程序将要做的事情之一是允许与某些连接的客户端进行通信,只允许与某些组中的客户端进行通信。
正如我在一些示例中所看到的,我应该让客户端向服务器发送一个组名,然后将用户连接ID添加到一个组,然后我就能够仅向用户发送数据了与连接的客户端位于同一组中。
所以我的问题是,想象一下学校聊天应用程序,我希望只有一个班级的法律学生可以访问该班级的聊天组,所以我想要传递加入组的GroupName,不要改变,我希望它不会显示给查看页面源代码的某个用户,我该怎样做那样的工作?
我在渲染Razor页面时想到,我得到一些关于用户及其所属组的信息,并创建一个加密密钥,在服务器上解密以将用户添加到正确的组中,它会起作用吗?但问题是加密密钥对于每个连接的用户都是相同的,因为输入始终是相同的,对吧?对于每个连接,它不会是一个不同的密钥,所以有些人可以得到密钥并解密它......
所以我想要的东西就像BCrypt Hash,可以为同一输入生成不同的输出,但我希望能够反转服务器上的密钥以将用户添加到正确的组中。
我怎么做这样的事情?
答案 0 :(得分:1)
来自您的评论:
我扫描了qrcode,因此我可以访问“房间”
假设QR码具有隐含的房间ID,当用户/客户端连接到服务器时,您可以将连接ID或用户名映射到特定的房间ID或信号器组名称。
该地图可能是服务器上的静态ConcurrentDictionary
。
但是你在谈论编写内容。在我看来,安全很重要。在这种情况下,任何有权访问QR码的人都可以进入房间,并且根本不安全,除非您在用户连接后禁用QR访问。
如果您确实需要保护房间/群组访问权限,则应对每个用户进行身份验证和保留。然后,服务器确切地知道谁正在连接,并且能够自动设置房间(signalR组)。