【问题标题】:How to manage user sessions across multiple servers?如何跨多个服务器管理用户会话?
【发布时间】:2017-05-15 13:25:09
【问题描述】:

我有一个对用户进行身份验证的 Web 服务,如果成功,则给他们一个 JSON Web 令牌,他们可以使用它来保持他们的会话。
目前我只有一台服务器,但为了提高性能,理想情况下希望将其增加到两台或更多,但是我不确定这将如何与不同的服务器一起工作,因为它们将有不同的实例来维护谁是当前已登录。

例如,我的服务将检查客户端返回的 JWT,并且(假设它是一个好的令牌)将获取用户 ID 和会话并检查是否有用户使用该会话 ID 登录。
但是,例如,如果 Web 服务层之前的中间件确定用户最初登录的服务器当前不可用,并将请求路由到 Web 服务的不同服务器实例,那么身份验证控制器将如何评估是否请求有效吗?

下面是我的服务的一个非常基本的版本,黑色箭头代表普通通信,红色箭头代表第一层决定将请求路由到实例二时的通信。 第 1 层本质上是非常基础的,除了根据第 2 层实例的可用性将流量路由到下一层之外,并没有真正做任何事情。

【问题讨论】:

    标签: java session authentication jwt


    【解决方案1】:

    JWT 的主要优点之一是它不需要服务器存储,因为它是自包含且无状态的。如果您需要服务器会话可能是 JWT,那么它不是管理身份验证的最佳选择。见Stop using JWT for sessions

    当前应用服务器使用 SESSION ID 来管理负载平衡和重定向到存储用户会话的服务器,包括持久存储和会话迁移。使用 JWT,您不会从这些特征中获利。

    如果您需要带有身份验证的 REST 无状态端点,或者您需要在各方之间安全地交换数据,请使用 JWT

    【讨论】:

      猜你喜欢
      • 2014-04-04
      • 2021-08-05
      • 1970-01-01
      • 1970-01-01
      • 2020-04-21
      • 2011-09-23
      • 1970-01-01
      • 2015-04-13
      相关资源
      最近更新 更多