跨多个无状态 API 应用程序的用户管理

User management across multiple stateless API applications

我们想让我们的API无国籍。

现在,用户的令牌在登录时通过第 3 方提供,并存储在应用程序内存中。

只要令牌在使用,它就是有效的。直到它空闲一段可配置的时间。

在第 3 方(令牌提供者)方面,此令牌的有效期更长(例如:无论使用情况如何,他们的一个月与我们的 20 分钟空闲时间相比)。

意思是,每次使用此令牌都会更新应用程序内存中的时间戳。

作为使我们的 API 无状态的一部分,我遇到了一个问题:

假设我们有多个应用程序和一个负载均衡器, 我如何维护 2 个应用程序之间的用户管理?

如果令牌不在应用程序内存中(但在第 3 方端仍然有效),我知道如何恢复用户 profile/details,但我不知道它最后一次使用的时间戳。

我想我要么必须在我的应用程序之间同步缓存,要么在另一个服务上管理用户。

我希望我的解释足够清楚。

我的问题是:

  1. 这个问题的最佳做法是什么?
  2. 我在哪里可以找到有关跨多个应用程序的用户管理的有用信息?我认为在这种情况下我正在努力寻找关键词。

提前致谢

从体系结构的角度来看,单独的用户管理器更可取。在这种情况下,您永远不会直接求助于您的第 3 方令牌提供商,而是通过您自己的存储令牌和时间戳的管理器来完成。然而,这可能需要认真的重构。

因此,我可以提供的其他解决方案可能是使用在进程和机器之间提供共享内存的工具。例如,您可以使用 Hazelcast。启动工具非常简单,非常人性化 API。例如,如果您在地图中存储从令牌到时间戳的映射,现在您唯一需要更改的就是创建地图的位置。使用 Hazelcast 地图工厂而不是 new HashMap<>(),您的令牌将神奇地分布在您的应用程序中。