代码之家  ›  专栏  ›  技术社区  ›  rico

服务器上同时支持简单http和websocket的用户身份验证

  •  0
  • rico  · 技术社区  · 8 年前

    用户可以通过简单的http或websocket连接到服务器。

    当http会话过期时,websocket会话会发生什么情况? 当WebSocket会话关闭时,HTTP会话会发生什么情况?

    如何在支持这两种协议的服务器上处理用户身份验证?

    3 回复  |  直到 8 年前
        1
  •  1
  •   cassiomolin    8 年前

    这个 RFC 6455 是定义WebSockets协议的文档,它没有规定任何特定的客户端身份验证方法:

    10.5. WebSocket Client Authentication

    此协议没有规定服务器在WebSocket握手过程中对客户端进行身份验证的任何特定方式。websocket服务器可以使用通用http服务器可用的任何客户端身份验证机制,例如cookies、http身份验证或tls身份验证。

    虽然websockets和http可以从相同的基础设施(代理、过滤、身份验证)中获益,但请记住http和websockets是 不同的沟通渠道 在设计身份验证机制时必须考虑到这一点:一个常见的误解是,在宿主web应用程序中进行身份验证的用户也在socket流中进行身份验证。

        2
  •  1
  •   Sepehr GH    8 年前

    这实际上取决于应用程序如何处理它。正如@myst提到的,通常只有一个会话cookie——http会话。当会话无效时,服务器应用程序可以关闭WebSoCK,或者在下次连接时保持它打开。只是检查连接到websocket的会话的时间问题:仅当建立连接时?或者当收到消息时?

        3
  •  1
  •   Myst    8 年前

    一般来说,通常只有一个会话cookie——HTTP会话。

    由于websocket连接以http开始,因此通常在http阶段对连接进行身份验证,并且只有在身份验证成功后才升级到websocket…

    …这取决于应用程序的设计,但通常是这样。

    如果会话在websocket连接建立后失效,则该连接将(通常)在其持续的时间内保持打开和身份验证(因为大多数应用程序在连接建立后不会重复身份验证阶段)。