You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Keycloak桌面Java适配器删除KEYCLOAK_IDENTITY类Cookie如何避免

问题解决:Keycloak Java桌面适配器登录后清除浏览器SSO Cookie问题

根因说明

Keycloak 15.0.2版本的KeycloakInstalled桌面适配器默认内置了安全策略:登录授权流程完成后,会在回调响应中主动将KEYCLOAK_IDENTITY、KEYCLOAK_IDENTITY_LEGACY等SSO会话Cookie的过期时间设置为过去时间,清除浏览器侧的会话残留,避免桌面端登录后浏览器遗留会话的安全风险。这个机制就是你遇到旧Cookie被删除、新Cookie无法写入、无法实现跨应用SSO的核心原因。

修复方案

按优先级从高到低选择即可:

  • 方案1:添加配置禁用Cookie清除逻辑(推荐,无需修改源码)
    在你的keycloak.json配置文件中新增如下配置项即可:
{
  // 原有其他配置保持不变
  "disable-clearing-identity-cookie": true
}

如果是用代码动态覆盖配置,可以在初始化KeycloakInstalled时添加:

// 原有初始化逻辑不变
keycloak.getDeployment().setDisableClearingIdentityCookie(true);

keycloak.loginDesktop();
  • 方案2:调整Cookie适配跨域场景
    如果你的多Web应用存在跨站部署的情况,还需要额外调整Keycloak Realm的Cookie配置:
  1. 进入对应Realm的「Realm Settings」-「Cookies」配置页
  2. 将SameSite Cookie属性修改为None
  3. 确认所有应用都使用HTTPS协议访问(SameSite=None必须配合HTTPS生效)
  • 方案3:自定义适配器逻辑(仅在上述方案不生效时使用)
    如果因为版本适配问题配置项不生效,可以继承KeycloakInstalled类,重写loginDesktop方法,删除其中回调响应中设置Cookie过期的相关逻辑即可。

验证步骤

  1. 重启桌面应用,重新触发登录流程
  2. 登录完成后打开浏览器开发者工具,检查Keycloak域名下的Cookie,确认KEYCLOAK_IDENTITY等Cookie的过期时间为正常的会话有效期,未被设置为过去时间
  3. 访问同Realm下的其他Web应用,确认无需重复登录即可正常访问,SSO能力生效

内容的提问来源于stack exchange,提问作者Daniel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 21:30:04