如何跨多个服务器管理用户会话?

时间:2016-12-31 16:03:38

标签: java session authentication jwt

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

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

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

enter image description here

1 个答案:

答案 0 :(得分:0)

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

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

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