Keycloak集群环境下Token跨实例共享失效问题
Keycloak集群Token跨实例验证失败解决方案
问题诊断
你的Keycloak集群已成功组建(日志显示节点发现并完成数据重平衡),用户/客户端数据能跨实例同步,但Token无法在其他实例验证,核心原因是签名密钥未在集群节点间同步。
你之前修改owners数量无效,是因为owners仅作用于分布式缓存的副本数,而负责存储签名密钥的keys缓存原本配置为local-cache,根本不会参与集群数据同步。每个节点会生成独立的签名密钥对,导致其他节点无法验证异节点生成的Token。
修复步骤
修改infinispan.xml配置,将keys缓存从local-cache改为**replicated-cache**(推荐,密钥数据量小,全节点复制更高效):
<!-- 替换原有的local-cache name="keys"配置 --> <replicated-cache name="keys"> <encoding> <key media-type="application/x-java-object"/> <value media-type="application/x-java-object"/> </encoding> <expiration max-idle="3600000"/> <memory max-count="1000"/> </replicated-cache>
验证操作
- 重启所有Keycloak节点,让新的缓存配置生效
- 用其中一个节点生成REST API认证Token,调用另一个节点的API接口,确认Token验证通过
- 检查集群日志,确保
keys缓存完成数据同步(可搜索ISPN100010关键词确认重平衡完成)
内容的提问来源于stack exchange,提问作者NihalAntony
相关产品推荐
相关产品推荐

