【问题标题】:user authentication with express and sockjs使用 express 和 sockjs 进行用户身份验证
【发布时间】:2014-03-18 19:58:35
【问题描述】:

在 sockjs github 页面上写的 - cookie 不能用于用户身份验证。在哪里我可以阅读有关在 sockjs 中对用户进行身份验证的方法,最好举个例子。我不想使用 socket.io。

【问题讨论】:

    标签: node.js express sockjs


    【解决方案1】:

    您可以对 redis 和 sockjs 使用基于令牌的方法。在高层次上,该过程可以像这样工作:

    1. 客户端首先通过常规 HTTP 请求从服务器请求令牌(实现为 uuid)。这会通过 express 的中间件路由请求,并可以轻松访问 cookie 和所有会话数据。
    2. 生成令牌时,它作为键值对存储在 redis 中,其中令牌是键,会话数据是值。
    3. 然后令牌被传回给用户,sockjs 客户端在发出初始连接“升级”请求时将其作为 GET 参数附加到 url。
    4. 当 sockjs 服务器收到授权请求而不是验证 cookie 时,它​​会解析 url,弹出令牌,并尝试在 redis 中查询由令牌键入的键值对。如果 redis 查询失败或返回 null 数据,则您拒绝授权请求。如果 redis 请求成功,则您可以完全访问所有会话数据,现在您可以删除 redis 中的键值对。

    这里的一个可能问题是,您需要在每个连接请求上请求一个新令牌。否则,它会尝试使用相同的令牌。如果您在验证令牌后删除令牌,这将阻止套接字重新连接。根据您的应用程序,这可能是所需的行为。它是给我们的,所以我们保持原样,但它仍然值得了解。

    【讨论】:

    • 最初,当我写这篇文章时,我使用的是 socket.io,并在这里假设可以在 websocket 升级请求中传递查询参数。这实际上用 sockjs 是不可能的,所以我们编写了一个库来处理大部分这些东西,欢迎你使用它。 npmjs.org/package/node-token-sockjs
    猜你喜欢
    • 2019-05-26
    • 2018-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-01
    • 1970-01-01
    • 2012-01-13
    • 2017-02-18
    相关资源
    最近更新 更多