Принцип сервера длинных опросов (аутентификация клиента) - PullRequest
3 голосов
/ 09 января 2011

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

Теперь клиент хочет войти и продолжить как аутентифицированный пользователь.Проблема заключается в том, что сервер длинных опросов (node.js) и веб-платформа (ASP.NET) работают как автономные системы.Я могу использовать специальный механизм аутентификации ASP.NET (MVC) для входа в систему с точки зрения веб-фреймворка, но это не влияет на сервер длинных опросов (где меня все еще называют каким-то парнем с GUID).Как я должен безопасно аутентифицировать пользователя с точки зрения сервера длинных опросов?Есть ли «лучшие практики» для этого сценария?После процедуры аутентификации клиент, прошедший проверку подлинности, должен быть дополнительно идентифицирован по его уникальному ключу (скажем, почтовый адрес вместо GUID).

Ответы [ 2 ]

2 голосов
/ 01 февраля 2011

В настоящее время я сталкиваюсь с той же проблемой, и вот что я собираюсь сделать:

У меня есть сервер REST на Java, который предоставляет API для моего веб-клиента.Для длительного опроса я написал небольшой сервер node.js.

  1. Клиент подключается к node.js, отправляя имя пользователя / пароль (через HTTPS).Вы также можете передать токен Session.
  2. node.js вызывает REST-сервер для аутентификации пользователя с указанными учетными данными
  3. Если пользователь аутентифицирован, node.js ожидает или отправляет 401 в противном случае

Преимущество заключается в том, что серверу node.js не нужно ничего знать о структуре БД, ему не нужно включать вызовы sql.Это также позволяет переписать сервер с измененным Python, если вы хотите.

2 голосов
/ 09 января 2011

Один тонкий, который я мог бы себе представить:

  1. Выдать идентификатор сеанса, либо использовать материал ASP.net, либо выдать дополнительный, вам может потребоваться подключиться к аутентификации ASP.net для аннулированияпри необходимости -
  2. При длительном опросе обязательно отправьте cookie-файл вместе с ним, чтобы сервер Node.js получил его.
  3. Сохраните GUID в БД, к которой у вас есть доступкак из ASP, так и из Node.js.

Остальное должно быть понятно: какие БД вы могли бы использовать, у меня нет никакого опыта, но там довольно много БД, много обёрток дляNode.js, хотя многие из них не поддерживаются или не завершены.

Вам следует проверить список базы данных в вики Node.js и взглянуть на каждый из них, не так ли?не забудьте поискать в Google информацию об этом и проверить, чтобы выяснить, не пропало ли что-то большое, прежде чем приступить к этому.

О, и мне на ум приходит другое (DBless) решение:

  1. Делать авторизацию через ASP.net
  2. Когда Node.js получаетIves cookie-файлы, перенаправьте их на специальную страницу ASP.net (вы можете сделать ее доступной только с localhost), которая просто сообщает Node.js, действителен ли этот запрос (он также может дать Node.js некоторые пользовательские данные)
  3. Только если запрос действителен, запустите длинный опрос

Это вряд ли приведет к задержке при выполнении на том же сервере.

...