Keycloak 17升级至26.4.5后多标签页会话行为变更及解决咨询
Keycloak 17→26.4.5 跨标签页会话行为变更原因及解决方案
变更原因
Keycloak从19.x版本开始强化了会话安全策略,默认启用了同一浏览器会话下的用户唯一性校验。这个设计是为了防范会话劫持风险,避免攻击者在已有用户会话的浏览器中切换登录其他用户,以此提升整体认证安全性。
恢复原有行为的解决方案
方案1:修改认证流程,移除用户重复校验
- 登录Keycloak管理控制台,进入目标Realm
- 导航至 Authentication > Flows,找到
Browser流程,点击右侧的Copy按钮创建自定义流程(比如命名为Custom Browser Flow) - 在自定义流程中,展开
Browser Forms下的Authentication Session Validation步骤 - 点击该步骤右侧的
Actions > Configure,将User Already Authenticated的处理逻辑改为Allow Switch User(或直接禁用该步骤) - 回到Realm的 Authentication > Bindings,将
Browser Flow绑定为刚才创建的自定义流程
方案2:认证请求添加prompt=login参数
在客户端发起认证请求时,强制添加prompt=login参数,让Keycloak忽略当前存在的会话,强制展示登录页面,允许输入新用户凭证:
http://your-keycloak-domain/realms/your-realm/protocol/openid-connect/auth?client_id=your-client-id&redirect_uri=your-redirect-uri&response_type=code&prompt=login
这个方式不需要修改Keycloak全局配置,适合特定客户端需要切换用户的场景。
方案3:调整Realm会话安全配置
- 进入目标Realm的 Realm Settings > Security > Session
- 找到并关闭
Enforce Unique User Session per Browser选项(26.4.5版本中该选项控制浏览器会话内的用户唯一性) - 保存配置后,同一浏览器会话下即可登出原有用户并切换登录新用户
注意:修改安全配置会降低一定的安全性,需根据业务场景评估风险后操作。
内容的提问来源于stack exchange,提问作者Abhay Kulkarni
相关产品推荐
相关产品推荐

