2016-10-15 2 views
1

Я начинаю создавать приложение, и я буду использовать SignalR, чтобы он работал в реальном времени. Одна из вещей, которые приложение собирается сделать, - это общение с определенными подключенными клиентами, только те, которые входят в какую-либо группу.Как создать группы SignalR во время выполнения

Как я видел в некоторых примерах, я должен заставить клиента отправить имя группы на сервер, а затем добавить идентификатор соединения пользователя в группу, а затем я могу отправлять данные только пользователям, которые в той же группе, что и подключенный клиент.

Итак, мой вопрос: представьте, например, приложение для школьного чата, где я хочу, чтобы только ученики Закона на одном классе имели доступ к группе чатов этого класса, поэтому GroupName, который я хочу передать группе соединений, не следует изменять, и я хочу, чтобы он не отображался для какого-либо пользователя, который просматривает исходный код страницы. Как мне сделать что-то, что работает так?

Я думал, что при создании страницы Razor я получаю некоторую информацию о пользователе и принадлежащей ей группе и создаю зашифрованный ключ, который будет расшифровываться на сервере, чтобы добавить пользователя в нужную группу, будет ли он работать? Но проблема в том, что зашифрованный ключ будет одинаковым для каждого подключенного пользователя, так как вход всегда один и тот же, верно? Это не было бы другим ключом для каждого соединения, поэтому некоторые могли бы получить ключ и расшифровать его ...

Так что я хотел что-то, что было бы похоже на хэширование BCrypt, которое может генерировать разные выходы для одного входа, но я хочу, чтобы можно было отменить ключ на сервере, чтобы добавить пользователя в нужную группу.

Любая идея, как я буду делать что-то подобное?

+0

Являются ли пользователи аутентифицированными при использовании чата? В этом случае решение прост, но я прошу только подтвердить, прежде чем ответить на вопрос – xleon

+0

Да, они прошли аутентификацию. Это похоже на то, что я просматриваю qrcode, и поэтому у меня есть доступ к «комнате», и для каждой комнаты будут какие-то администраторы, которым действительно нужно будет войти в систему, и они смогут общаться с клиентов комнаты и администраторов другой комнаты –

+0

И должен быть вариант, когда администратор может напрямую общаться с одним из клиентов. –

ответ

1

Из ваших комментариев:

Я отсканировать QRCode, и поэтому у меня есть доступ к «комнате»

Если предположить, что QR-код имеет неявный номера идентификатора, когда пользователь/клиент подключается к серверу, вы можете сопоставить идентификатор соединения или имя пользователя с определенным идентификатором комнаты или именем группы сигналов.

Эта карта может быть статичной ConcurrentDictionary на сервере. Но вы говорите о материалах для создания скриптов. Мне кажется, что безопасность важна. В этом случае любой, кто имеет доступ к QR-коду, может войти в комнату, и это не является безопасным вообще , если вы не отключите доступ к QR, как только пользователь подключится.

Если вам действительно необходимо обеспечить доступ в номер/группу, каждый пользователь должен быть аутентифицирован и сохранен. Тогда сервер точно знает, кто подключается и может автоматически назначить комнату (группу сигналов).

+0

qrcode будет сгенерирован администратором, и он должен быть действительным только в течение некоторого времени, например 60 секунд, и чем он не должен использоваться для входа в комнату, но пользователь, который использовал qr для ввода, не должен быть отключен , пока администратор не скажет это так. –

+0

Я думал о чем-то вроде входа пользователя с кодом, а затем я сохраняю его токен доступа к базе данных или что-то в этом роде, а затем он должен быть доступен до тех пор, пока администратор не аннулирует токен доступа. Поэтому при входе в систему я должен добавить идентификатор комнаты и получить доступ к «паролю» справа на qr. Но как мне каждый раз генерировать другой код и по-прежнему указывать его в одну комнату. –

+0

QR генерируется администратором сервера, поэтому сервер может отображать разрозненный код с идентификатором комнаты. Другими словами, должна быть связь между QR-кодом и идентификатором комнаты (только на сервере). Затем, когда пользователь использует этот код для входа в систему, сервер знает, какую комнату/группу присоединиться – xleon