3

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

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

4

2 回答 2

2

我可以想象的一个薄:

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

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

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

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

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

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

于 2011-01-09T10:11:23.633 回答
2

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

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

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

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

于 2011-02-01T08:18:50.813 回答