2011-01-08 61 views
3

假设我有一个很长的轮询服务器,它应该可以工作 - 当新客户端连接到网站时(他只是作为匿名身份进行连接而无需身份验证),就会发布并存储新的GUID在签名的cookie中,在客户端和服务器之间的轮询期间标识此连接。长轮询服务器原理(客户端认证)

现在客户端想要登录并继续作为已认证的用户。问题在于长查询服务器(node.js)和Web框架(ASP.NET)作为独立系统运行。我可以使用ASP.NET(MVC)特定的身份验证机制从Web框架的角度登录,但这不会影响长时间轮询服务器(我仍称为某个GUID人员)。我应该如何安全地从长轮询服务器的角度来验证用户?这种情况下是否有任何“最佳做法”?经过身份验证的客户端应在身份验证过程后,通过其唯一密钥进行进一步身份验证(例如,使用邮件地址而不是GUID)。

回答

2

一瘦我能想象:

  1. 问题会话ID,要么使用ASP.net的东西,或者发出额外的一个,你可能需要挂接到ASP.net身份验证时它无效需要 -
  2. 当进行长轮询时,一定要发送cookie,以便Node.js服务器接收它。
  3. 将GUID保存到可以从ASP和Node.js访问的数据库。

其余的应该很清楚,对于其数据块,你可以使用,我没有任何经验,但有一个DB相当的很多包装的Node.js的,虽然其中不少是没有维护或功能不完整。

您应该查看Node.js wiki中的database listing并查看每一个,不要忘记在Google上搜索它并检查问题,看看在使用它之前是否有大的缺失。

哦,另一个(DBless)解决方案,如雨后春笋般在我的脑海:

  1. 通过ASP.net执行权威性
  2. 当Node.js的接收AUTH饼干,它们转发到一个特殊的ASP.net页(你可以使它只能从本地主机访问),它只是告诉Node.js这个请求是否有效(它也可以给Node.js一些用户数据)
  3. 只有当请求有效时,开始长轮询

在同一台服务器上完成时,几乎不会引入任何延迟。

+0

感谢您的想法。我也在首先考虑共享DB解决方案。第二个解决方案听起来很有趣,特别是可以返回当前经过身份验证的用户标识(ASP.NET User.Identity.Name属性)的localhost页面。 – yojimbo87 2011-01-09 11:30:28

2

我目前所面临的同样的问题,这里是我会怎么做:

我有在Java中,供应的API,以我的Web客户端一个REST服务器。对于长时间轮询,我写了一个小型的node.js服务器。

  1. 客户端连接到发送用户名/密码(通过HTTPS)的node.js。您还可以传递会话令牌。
  2. node.js调用REST服务器以授予给定凭证的用户身份
  3. 如果用户是经过身份验证的节点。js等待或发送401否则

好处是,node.js服务器不需要知道关于数据库结构的任何内容,不需要包含sql调用。如果你愿意,这也允许用Python扭曲来重写服务器。