在 Keycloak 中保持用户会话的最佳方法是什么?

问题描述 投票:0回答:2

我正在使用独立的 Keycloak 服务器。我创建了一个领域和该领域内的一名用户。当我登录用户并重新启动 keycloak 服务器时,会话会丢失。

我知道 keycloak 将用户会话数据保存在 Infinispan 中。但是有什么方法可以保存/保留这个用户会话数据吗?

或者我应该创建多个节点集群并复制 keycloak 会话数据吗?

请提出最好的建议。

keycloak
2个回答
4
投票

我们也有这个问题。

到目前为止我认为有两种解决方案,但都不是完美的:

1.保持会话无限期

您可以使用外部 infinispan 实例,如文档中所述。这很麻烦,因为你需要保留一个外部 infinispan 实例。

如果不想使用外部infinispan实例,可以在docker镜像中设置

CACHE_OWNERS_COUNT
>=2。这将重新平衡节点之间的缓存,并确保条目至少保存在
CACHE_OWNERS_COUNT
节点中。如果您有很多会话(>100 万个),您将耗尽内存,并且启动时间将大幅增加,因为每次部署时都需要重新平衡缓存。

另一个问题是更新 infinispan 实例时会丢失会话。

2.使用离线会话

离线会话保存在数据库中,其中一些保存在offline_sessions_cache中。您可以限制 keycloak 保留在内存中的离线会话数量,并停止预加载离线会话以加快启动速度,如此处所述。

这也有缺点:

  • 服务器重启后SSO将无法工作
  • 您无法更改任何离线会话笔记

我认为 keycloak 中有一些 PR 可以内置持久会话存储,所以请密切关注 keycloak Github 页面上的 progress


0
投票

我尝试过 infinispand 的东西,但失败了。当我在上面放一个卷时,它告诉我它无法访问文件,或者当我连接时,它给我这个错误([1;31m2024-05-16 11:55:34,964 ERROR (non-blocking-thread) --p2-t4) [org.infinispan.server.hotrod.BaseRequestProcessor] ISPN005003: 报告异常 org.infinispan.commons.dataconversion.EncodingException: ISPN000495: JBossMarshallingTranscoder 遇到错误转码内容)。你建议我做什么?

© www.soinside.com 2019 - 2024. All rights reserved.