【问题标题】:Long polling server principle (client authentication)长轮询服务器原理(客户端认证)
【发布时间】:2011-06-05 22:12:30
【问题描述】:

假设我有一个按预期工作的长轮询服务器 - 当新客户端连接到网站时(他只是以匿名身份连接而无需身份验证),会发出新的 GUID 并将其存储在标识此连接的签名 cookie 中在客户端和服务器之间的轮询期间。

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

    【讨论】:

      【解决方案2】:

      我能想象的一点点:

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

      其余的应该很清楚,至于您可以使用哪些数据库,我没有任何经验,但是有相当多的数据库,有很多 Node.js 的包装器,尽管其中许多没有维护或功能不完整.

      您应该查看 Node.js wiki 中的 database listing 并查看每一个,不要忘记在 Google 上搜索它并检查问题,看看是否有任何重大遗漏,然后再使用它。

      我想到了另一个(DBless)解决方案:

      1. 通过 ASP.net 进行身份验证
      2. 当 Node.js 接收到身份验证 cookie 时,将它们转发到一个特殊的 ASP.net 页面(您可以使它只能从 localhost 访问),它只是告诉 Node.js 这个请求是否有效(它也可以给 Node.js一些用户数据)
      3. 只有当请求有效时,才开始长轮询

      在同一台服务器上执行此操作几乎不会引入任何延迟。

      【讨论】:

      • 感谢您的意见。我也在考虑首先考虑共享数据库解决方案。第二种解决方案听起来很有趣,尤其是可以返回当前经过身份验证的用户标识符(ASP.NET User.Identity.Name 属性)的 localhost 页面。
      猜你喜欢
      • 2011-05-14
      • 1970-01-01
      • 1970-01-01
      • 2012-10-16
      • 2013-02-23
      • 1970-01-01
      • 2013-11-13
      • 2012-06-03
      • 1970-01-01
      相关资源
      最近更新 更多