2011-01-08 4 views
3

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

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

ответ

2

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

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

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

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

О, и еще одно решение (DBless) вскакивая на мой взгляд:

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

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

+0

Спасибо за идеи. Я также думал о решении совместного БД. Второе решение кажется интересным, особенно на странице локального хоста, которая может вернуть текущий аутентифицированный идентификатор пользователя (свойство ASP.NET User.Identity.Name). – yojimbo87

2

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

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

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

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