Принцип длинного опроса сервера (аутентификация клиента)

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

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


person yojimbo87    schedule 08.01.2011    source источник


Ответы (2)


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

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

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

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

О, и еще одно решение (без DB), которое приходит мне на ум:

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

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

person Ivo Wetzel    schedule 09.01.2011
comment
Спасибо за идеи. Я также сначала думал о совместном решении для БД. Второе решение звучит интересно, особенно страница localhost, которая может возвращать текущий аутентифицированный идентификатор пользователя (свойство ASP.NET User.Identity.Name). - person yojimbo87; 09.01.2011

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

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

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

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

person magiconair    schedule 01.02.2011