长轮询服务器原理(客户端身份验证)

时间:2011-01-08 23:29:48

标签: javascript asp.net security node.js long-polling

假设我有一个长的轮询服务器,它可以正常工作 - 当新客户端连接到网站时(他只是匿名连接而不进行身份验证),新的GUID被发布并存储在一个签名的cookie中,用于标识此连接在客户端和服务器之间的民意调查期间。

现在,客户端希望以身份验证的用户身份登录并继续。问题是长轮询服务器(node.js)和Web框架(ASP.NET)作为独立系统工作。我可以使用ASP.NET(MVC)特定的身份验证机制从Web框架的角度登录,但这不会影响长轮询服务器(我仍然称为某些GUID人)。从长轮询服务器的角度来看,我应该如何安全验证用户身份?这种情况是否有“最佳实践”?在身份验证过程之后,经过身份验证的客户端应该通过其唯一密钥进一步识别(假设是一个邮件地址而不是GUID)。

2 个答案:

答案 0 :(得分:2)

我能想象的那么薄:

  1. 发布一个会话ID,要么使用ASP.net,要么发一个额外的ID,你可能需要挂钩到ASP.net auth以在需要时使其无效 -
  2. 进行长轮询时,请务必使用它发送cookie,以便Node.js服务器接收它。
  3. 将GUID保存到可以从ASP和Node.js访问的数据库。
  4. 其余的应该是清楚的,至于你可以使用哪些数据库,我没有任何经验,但是有很多数据库为Node.js提供了很多包装,尽管其中许多包都没有维护或功能不完整

    你应该查看Node.js wiki中的database listing并查看每一个,不要忘记在Google上搜索它并检查问题,看看你之前是否有任何大的遗漏跟着它。

    哦,另一个(DBless)解决方案涌现在我脑海中:

    1. 通过ASP.net进行身份验证
    2. 当Node.js收到auth cookie时,将它们转发到一个特殊的ASP.net页面(你可以只从localhost访问它),它只告诉Node.js这个请求是否有效(它也可以给Node.js一些用户数据)
    3. 仅在请求有效时,启动长轮询
    4. 在同一台服务器上完成时,这几乎不会引入任何延迟。

答案 1 :(得分:2)

我目前面临同样的问题,这就是我要做的事情:

我在Java中有一个REST服务器,它为我的Web客户端提供API。对于长轮询,我编写了一个小node.js服务器。

  1. 客户端连接到node.js发送用户名/密码(通过HTTPS)。您也可以传递会话令牌。
  2. node.js调用REST服务器以使用给定凭据授权用户
  3. 如果用户经过身份验证,则node.js会等待或发送401,否则
  4. 好处是node.js服务器不需要知道有关DB结构的任何信息,也不需要包含sql调用。如果你愿意,这也允许用Python扭曲重写服务器。