keycloak什么时候删除过期会话?
When does keycloak delete expired sessions?
我注意到通过 SSO session idle 和 SSO session max 的会话不会立即被删除。它们似乎是无效的,因此没有用,但它们并没有立即被删除。我可以在管理控制台的会话选项卡中查看它们。
因为我找不到对此的解释,或者这个机制在内部是如何工作的(没有查看代码),我想知道,是否有人可以详细说明发生了什么?一切正常吗?
Keycloak 严重依赖 Infinispan 进行缓存。许多类型的实体都有直接为其配置的专用缓存,并且不排除会话。
启动 Keycloak 时,您指定配置 file/operation 模式(通过 -c
参数)。例如,当我通过 docker 运行 我的密钥斗篷时,我得到以下命令行:
java -D[Standalone] -server -Xms64m -Xmx512m -XX:MetaspaceSize=96M -XX:MaxMetaspaceSize=256m -Djava.net.preferIPv4Stack=true -Djboss.modules.system.pkgs=org.jboss.byteman -Djava.awt.headless=true --add-exports=java.base/sun.nio.ch=ALL-UNNAMED --add-exports=jdk.unsupported/sun.misc=ALL-UNNAMED --add-exports=jdk.unsupported/sun.reflect=ALL-UNNAMED -Dorg.jboss.boot.log.file=/opt/jboss/keycloak/standalone/log/server.log -Dlogging.configuration=file:/opt/jboss/keycloak/standalone/configuration/logging.properties -jar /opt/jboss/keycloak/jboss-modules.jar -mp /opt/jboss/keycloak/modules org.jboss.as.standalone -Djboss.home.dir=/opt/jboss/keycloak -Djboss.server.base.dir=/opt/jboss/keycloak/standalone -Djboss.bind.address=172.19.0.3 -Djboss.bind.address.private=172.19.0.3 -c=standalone-ha.xml -Dkeycloak.profile.feature.token_exchange=enabled -Dkeycloak.profile.feature.admin_fine_grained_authz=enabled
可以看到-D[Standalone]
(运行模式)和-c=standalone-ha.xml
,指向配置XML文件
在其中,您可以看到类似以下内容的部分:
<subsystem xmlns="urn:jboss:domain:infinispan:11.0">
<cache-container name="keycloak" module="org.keycloak.keycloak-model-infinispan">
<local-cache name="realms">
<heap-memory size="10000"/>
</local-cache>
<local-cache name="users">
<heap-memory size="10000"/>
</local-cache>
<local-cache name="sessions"/>
<local-cache name="authenticationSessions"/>
<local-cache name="offlineSessions"/>
<local-cache name="clientSessions"/>
<local-cache name="offlineClientSessions"/>
<local-cache name="loginFailures"/>
<local-cache name="work"/>
<local-cache name="authorization">
<heap-memory size="10000"/>
</local-cache>
<local-cache name="keys">
<heap-memory size="1000"/>
<expiration max-idle="3600000"/>
</local-cache>
<local-cache name="actionTokens">
<heap-memory size="-1"/>
<expiration interval="300000" max-idle="-1"/>
</local-cache>
</cache-container>
...
...
...
</subsystem>
您可以尝试调整各种会话缓存 expiration
/lifespan
属性。
看看Cache-Configuration section of the manual, and also on the xmlns infinispan-config specification
我注意到通过 SSO session idle 和 SSO session max 的会话不会立即被删除。它们似乎是无效的,因此没有用,但它们并没有立即被删除。我可以在管理控制台的会话选项卡中查看它们。
因为我找不到对此的解释,或者这个机制在内部是如何工作的(没有查看代码),我想知道,是否有人可以详细说明发生了什么?一切正常吗?
Keycloak 严重依赖 Infinispan 进行缓存。许多类型的实体都有直接为其配置的专用缓存,并且不排除会话。
启动 Keycloak 时,您指定配置 file/operation 模式(通过 -c
参数)。例如,当我通过 docker 运行 我的密钥斗篷时,我得到以下命令行:
java -D[Standalone] -server -Xms64m -Xmx512m -XX:MetaspaceSize=96M -XX:MaxMetaspaceSize=256m -Djava.net.preferIPv4Stack=true -Djboss.modules.system.pkgs=org.jboss.byteman -Djava.awt.headless=true --add-exports=java.base/sun.nio.ch=ALL-UNNAMED --add-exports=jdk.unsupported/sun.misc=ALL-UNNAMED --add-exports=jdk.unsupported/sun.reflect=ALL-UNNAMED -Dorg.jboss.boot.log.file=/opt/jboss/keycloak/standalone/log/server.log -Dlogging.configuration=file:/opt/jboss/keycloak/standalone/configuration/logging.properties -jar /opt/jboss/keycloak/jboss-modules.jar -mp /opt/jboss/keycloak/modules org.jboss.as.standalone -Djboss.home.dir=/opt/jboss/keycloak -Djboss.server.base.dir=/opt/jboss/keycloak/standalone -Djboss.bind.address=172.19.0.3 -Djboss.bind.address.private=172.19.0.3 -c=standalone-ha.xml -Dkeycloak.profile.feature.token_exchange=enabled -Dkeycloak.profile.feature.admin_fine_grained_authz=enabled
可以看到-D[Standalone]
(运行模式)和-c=standalone-ha.xml
,指向配置XML文件
在其中,您可以看到类似以下内容的部分:
<subsystem xmlns="urn:jboss:domain:infinispan:11.0">
<cache-container name="keycloak" module="org.keycloak.keycloak-model-infinispan">
<local-cache name="realms">
<heap-memory size="10000"/>
</local-cache>
<local-cache name="users">
<heap-memory size="10000"/>
</local-cache>
<local-cache name="sessions"/>
<local-cache name="authenticationSessions"/>
<local-cache name="offlineSessions"/>
<local-cache name="clientSessions"/>
<local-cache name="offlineClientSessions"/>
<local-cache name="loginFailures"/>
<local-cache name="work"/>
<local-cache name="authorization">
<heap-memory size="10000"/>
</local-cache>
<local-cache name="keys">
<heap-memory size="1000"/>
<expiration max-idle="3600000"/>
</local-cache>
<local-cache name="actionTokens">
<heap-memory size="-1"/>
<expiration interval="300000" max-idle="-1"/>
</local-cache>
</cache-container>
...
...
...
</subsystem>
您可以尝试调整各种会话缓存 expiration
/lifespan
属性。
看看Cache-Configuration section of the manual, and also on the xmlns infinispan-config specification