15.16. 限制身份验证会话
当在网页浏览器中第一次打开登录页面时,红帽构建的 Keycloak 会创建一个名为身份验证会话的对象,该对象存储了有关该请求的一些有用信息。每当从同一浏览器中的不同标签页打开新的登录页面时,Red Hat build of Keycloak 会创建一个名为 authentication 子会话的新记录,该记录存储在身份验证会话中。身份验证请求可以来自任何类型的客户端,如 Admin CLI。在这种情况下,也会使用一个身份验证子会话创建一个新的身份验证会话。请注意,除了使用浏览器流外,还可以其他方式创建身份验证会话。无论源流是什么,以下文本都适用。
本节论述了使用 Data Grid 供应商进行身份验证会话的部署。
身份验证会话内部存储为 RootAuthenticationSessionEntity。每个 RootAuthenticationSessionEntity 都可以将多个身份验证子会话存储在 RootAuthenticationSessionEntity 中,作为 AuthenticationSessionEntity 对象的集合。红帽构建的 Keycloak 将身份验证会话存储在专用 Data Grid 缓存中。每个 Root 的 AuthenticationSessionEntity 数量有助于每个缓存条目的大小。身份验证会话缓存的内存占用总量由存储的 AuthenticationSessionEntity 以及每个 Root RootAuthenticationSessionEntity AuthenticationSessionEntity 中的 AuthenticationSessionEntity 的数量决定。
维护的 RootAuthenticationSessionEntity 对象数量与来自浏览器的未完成登录流的数量对应。要在控制下保留 RootAuthenticationSessionEntity 的数量,建议使用高级防火墙控制来限制入口网络流量。
当存在许多活跃的 RootAuthenticationSessionEntity 并有很多身份验证SessionEntity 时,可能会发生更高的内存用量。如果负载均衡器不支持或没有为会话粘性配置,集群中的负载可能会显著增加。这个负载的原因是,每个位于没有适当身份验证会话的节点上的请求都需要在所有者节点上检索和更新身份验证会话记录,这需要为检索和存储涉及单独的网络传输。
每个 Root 的最大 AuthenticationSessionEntity 可以通过设置属性 AuthenticationSessionEntity authSessionsLimit 在 authenticationSessions SPI 中配置。根据 Root ,默认值被设置为 300 AuthenticationSessionEntity。达到此限制时,最旧的身份验证子会话将在新的身份验证会话请求后删除。
AuthenticationSessionEntity
以下示例演示了如何将每个 Root 100。
AuthenticationSessionEntity 活跃身份验证SessionEntity 的数量限制为
bin/kc.[sh|bat] start --spi-authentication-sessions-infinispan-auth-sessions-limit=100
bin/kc.[sh|bat] start --spi-authentication-sessions-infinispan-auth-sessions-limit=100