【问题标题】:Socket.io - Authentication on every socket event for Session managementSocket.io - 会话管理的每个套接字事件的身份验证
【发布时间】:2021-02-01 00:51:29
【问题描述】:

如何使用在每个套接字事件而不是每个连接上触发的身份验证中间件?

我想将它用于 react-node 应用程序中的会话管理。一旦用户登录并在我的数据库的会话表中创建一个新行,我将发送一个 JWT 令牌。但是在他登录后,我想通过使用提到的中间件检查他是否是每个后续事件的同一个人。前端客户端会通过cookies发送token。

我的登录和注销是通过 socket.io 而不是 HTTP。

【问题讨论】:

  • 一旦连接,socket.io 连接唯一地属于一个特定的端点。连接 socket.io 连接时,该端点无法更改。因此,目前尚不清楚您认为需要对同一连接上的后续消息进行重新验证的原因或内容。无论如何,您将如何检查它是否是同一个人?使用 socket.io 得到的只是消息本身。除非客户端将它们放入消息中,否则没有其他身份验证凭据,在这种情况下,您可以编写自己的函数来检查消息中的数据。
  • 实际上有一个 socket.io middleware 会在每条消息上触发。抛开这一点,你说的是正确的。问这个问题时,我并没有完全意识到这个概念。感谢您对重新验证进行解释的评论。

标签: node.js reactjs socket.io jwt middleware


【解决方案1】:

一旦连接,socket.io 连接就唯一地属于一个特定的端点。连接 socket.io 连接时,该端点无法更改。因此,与任何 TCP 连接一样,您通常会在 socket.io 连接首次连接时验证/验证连接,从那时起,您只需处理来自该特定客户端的传入消息,无需额外验证。这通常是使用 TCP 和身份验证的所有东西的工作原理。 TCP 本身具有保护措施,因此套接字不能轻易地被另一个端点中间连接劫持。

因此,不清楚您认为需要对同一连接上的后续消息进行重新验证的原因或内容。

使用 socket.io,您收到的每条消息都是消息本身。除非客户端将它们放入实际消息中,否则没有其他身份验证凭据,在这种情况下,您可以编写自己的函数来检查消息中的数据。

如果您在每条消息中都添加了凭据,则可以使用socket.use() 来处理每条传入的消息并检查您想要在消息中检查的任何内容。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-28
    • 2012-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多