2015-06-25 3 views
1

Я работаю на WebsocketSharp и имеющие определенные трудности:Управления пользователей с помощью WebsocketSharp

  1. есть в любом случае для обработки аутентификации WebSocket на основе системы аутентификации на ASP.NET WebAPI, потому что я планирую до размещает сервер WebsocketSharp в ASP.NET WebAPI.

    ОБНОВЛЕНИЕ Я ясно эту часть. Это всего лишь два отдельных приложения, работающих на одном сервере. Так что никакого взаимодействия взад и вперед

  2. Как получить идентификатор отправителя, потому что я не вижу никакой инструкции в файле README.md на github.
  3. Как отправить сообщение конкретному пользователю или в любом случае конкретному идентификатору соединения . Единственный пример, который они дают, - Session.Broadcast , которые отправляются всем подключенным клиентам.

Websocketsharp GitHub сайт: https://github.com/sta/websocket-sharp

ответ

0

Вы не можете интегрировать WebSocketSharp в ASP.NET, даже если вы размещаете его в том же процессе. Он работает на своем собственном TCP-порту, не подозревая обо всех HTTP-модулях ASP.NET/IIS, которые работают для аутентификации.

Таким образом, вам придется самостоятельно выполнять ручную работу с куки-файлами или заголовками, например, открывать файл cookie или заголовок, который используется, и оценивать его самостоятельно.

Для ваших 2-го и 3-го вопросов есть много способов сделать это. Это общее программирование, а не что-то особенное для websockets. Взгляните на это chat example using WebSockets, это, вероятно, даст вам некоторые идеи.

+0

Однако. Потому что я использую базу данных пользователя, сохраняющую пароли в ASP.NET WebAPI. Этот пароль был хэширован алгоритмом asp при регистрации пользователя. Так или иначе, я могу получить простой текстовый пароль в Websocketsharp, передать его в хэш-алгоритм, который использует ASP.NET, а затем сравнить его с сохраненным хэшем пароля, который будет отмечен как аутентифицированный или нет? –

+0

Это похоже на очень плохую идею. Вы должны выполнить аутентификацию через ASP.NET, а затем прочитать этот cookie-файл проверки подлинности с вашего сервера веб-сервера, чтобы узнать, принадлежит ли запрос аутентифицированному пользователю.Также, если вы используете проверку подлинности форм, вы можете поместить идентификатор пользователя в зашифрованный билет. – vtortola

+0

Я использую аутентификацию на основе токенов в ASP.NET, для чего клиент должен установить заголовок проверки подлинности, содержащий «Bearer [токена строка]». Как обращаться в этом случае? –

0

Что касается вопросов 2 и 3, то websocket-sharp поддерживает это прямо из коробки (я использую версию 1.0.3-rc11).

В вашем классе сокетов, наследующем от WebSocketBehavior, у вас есть доступ к свойству ID, который дает строку guid, которая представляет текущее соединение сокета. Переопределяя обработчики OnOpen/OnClose/OnMessage, вы можете найти соответствующие точки для взаимодействия.

У вас также есть доступ к методу отправки, который принимает массив строк или байтов. Это будет отправлено на текущее соединение.

Если вам нужно вызвать сокет из другого кода, вам нужно получить экземпляр класса сокета. Оттуда вы можете использовать объект Session, как указано. Он имеет одну трансляцию, а также один метод SendTo. Последний принимает идентификатор, который заставит сообщение нацеливаться только на это соединение.

Это не решит все. Если вы указали сопоставление между идентификатором и пользователем, тогда вам нужно обработать его другими способами, например, предложенным vtortola. Но если вам действительно нужно, я предлагаю вам переключиться на SignalR, у которого есть встроенный с самого начала. Это облегчит вашу жизнь.

Смежные вопросы