双KeyCloak服务器跨应用SSO配置求助:已试IDP仍需重复登录
跨KeyCloak服务器实现应用间SSO解决方案
核心配置思路
将对接应用1的KeyCloak1设为主身份提供商(IDP),对接应用2的KeyCloak2作为服务提供者(SP),通过OIDC协议建立双向信任,同时配置自动认证跳转、跨域会话共享,实现应用间免登。
具体步骤
1. 配置KeyCloak1(主IDP)的对接客户端
- 登录KeyCloak1控制台,进入目标Realm
- 创建OpenID Connect客户端:
- 客户端类型选择
confidential - 有效重定向URI填写:
https://<keycloak2域名>/realms/<keycloak2的Realm名>/broker/<自定义IDP别名>/endpoint(<自定义IDP别名>后续配置KeyCloak2时使用,比如keycloak1-idp) - 开启
Standard Flow Enabled - 保存后,记录该客户端的
Client ID和Client Secret
- 客户端类型选择
2. 在KeyCloak2中添加KeyCloak1作为身份提供商
- 登录KeyCloak2控制台,进入目标Realm
- 转到Identity Providers → Add Provider → OpenID Connect v1.0
- 设置Alias为步骤1中定义的
<自定义IDP别名>(如keycloak1-idp) - 填写以下URL:
- Authorization URL:
https://<keycloak1域名>/realms/<keycloak1的Realm名>/protocol/openid-connect/auth - Token URL:
https://<keycloak1域名>/realms/<keycloak1的Realm名>/protocol/openid-connect/token
- Authorization URL:
- 填入步骤1中获取的
Client ID和Client Secret - Sync Mode选择
Force,确保用户属性自动同步 - First Broker Login Flow设为
first broker login(自动创建或关联KeyCloak2中的用户) - 保存配置
- 设置Alias为步骤1中定义的
3. 配置KeyCloak2中应用2的客户端
- 进入应用2在KeyCloak2对应的客户端设置
- 在Authentication Flow Overrides中,将Browser Flow替换为包含IDP自动跳转的流程:
- 可选方式1:直接使用内置的
browser-with-idp流程 - 可选方式2:自定义流程:编辑默认
browser流程,添加Identity Provider Redirector执行器,设置默认IDP为步骤2中配置的keycloak1-idp,并将该执行器设为第一个步骤
- 可选方式1:直接使用内置的
- 确保客户端的Valid Redirect URIs包含应用2的回调地址
4. 解决跨域会话共享问题(关键)
- 同根域场景:如果两个KeyCloak服务器属于同一根域(如
keycloak1.example.com和keycloak2.example.com),在两个KeyCloak的Realm设置中,将Cookie Domain设为根域(.example.com),实现会话Cookie跨子域共享 - 不同根域场景:
- 在KeyCloak1的客户端配置中,将KeyCloak2的域名添加到Web Origins
- 确保两个KeyCloak都开启HTTPS(现代浏览器限制非HTTPS环境的跨域Cookie传递)
5. 排查与验证
- 若跳转后仍需登录,检查以下点:
- KeyCloak1中客户端的重定向URI是否完全匹配KeyCloak2的IDP回调地址
- KeyCloak2的Browser Flow是否正确配置了IDP自动跳转,未强制本地登录
- 查看KeyCloak的服务器日志,排查认证流程中的错误(如IDP请求失败、用户同步异常)
内容的提问来源于stack exchange,提问作者uday kumar
相关产品推荐
相关产品推荐

