如何在Keycloak中实现跨Realm单点登录?
Keycloak跨Realm单点登录实现(应用独立Realm架构场景)
针对两个应用分属独立Keycloak Realm、需实现跨Realm SSO的场景,以下是具体落地步骤:
1. 建立Realm间双向信任
- 以Realm A(对应App A)为例,进入Realm A的Identity Providers页面,新增
Keycloak OpenID Connect类型的身份提供者:- 填入Realm B的OpenID配置地址:
http://<你的Keycloak地址>/auth/realms/<RealmB名称>/.well-known/openid-configuration - 设置易识别的别名(比如
realm-b-idp),启用该身份提供者
- 填入Realm B的OpenID配置地址:
- 同样在Realm B中,添加指向Realm A的同类型身份提供者,完成双向信任配置
2. 配置应用客户端的SSO参数
- 对每个Realm内的应用客户端:
- 开启Full Scope Allowed(无需精细权限控制时),或手动配置需要共享的角色/权限范围
- 更新Valid Redirect URIs,加入对方应用的登录回调地址(比如App A的客户端需添加App B的回调URL)
- 若应用跨域部署,开启Allow Cross Origin选项
3. 用户属性映射(按需配置)
- 若两个Realm的用户字段不一致,在身份提供者的Mappers标签页添加映射规则:
- 比如将Realm A的
email字段映射到Realm B的user_email,保证跨Realm时用户信息一致性 - 复杂场景可通过自定义脚本实现属性转换
- 比如将Realm A的
4. 验证SSO流程
- 打开App A,使用Realm A的账号登录
- 直接访问App B,系统会通过已建立的信任关系自动完成认证,无需重复输入Realm B的账号密码
- 反向操作(从App B登录后访问App A)同样生效
关键注意点
- 确保两个Realm所在的Keycloak实例网络互通,身份提供者的配置地址可正常访问
- 需权限限制时,可在身份提供者中设置Required Roles,仅允许指定角色的用户跨Realm登录
- 跨Realm会话的有效期取两个Realm中更短的超时设置
内容的提问来源于stack exchange,提问作者viv ojha
相关产品推荐
相关产品推荐

