Keycloak自定义用户联邦与身份提供商工作顺序咨询
Keycloak 两种自定义认证方式的工作顺序解析
嘿,先给你划个核心重点:Keycloak里的Realm是完全独立的安全域,你在X Realm配的自定义用户联邦,和Y Realm里的OIDC身份代理,默认情况下压根不会互相影响——各自在自己的Realm地盘里按规则干活。下面分场景给你掰扯清楚:
1. 单个Realm里的认证逻辑(对应你的两个配置场景)
Keycloak处理登录请求时,完全是按照你在Realm里**认证流程(Authentication Flow)**的配置顺序来挨个试认证方式的。
先说X Realm的自定义用户联邦
当用户在X Realm的登录页输完用户名密码,Keycloak会先查自己本地的用户数据库有没有这个用户:
- 要是本地找不到,才会触发你写的那个自定义用户联邦,调用你的联邦服务去做身份验证。
- 验证过了之后,Keycloak会在本地建个「影子用户」,下次这个用户再登录,会先查本地的影子用户,至于要不要再调用联邦服务,全看你在用户联邦配置里设的缓存、同步策略。
再讲Y Realm的OIDC身份代理
用户访问Y Realm的登录页时,你可以把这个OIDC代理设成默认认证方式,也可以让用户自己选「用第三方OIDC账号登录」:
- 如果设成默认触发,Keycloak会直接跳转到你配置的那个自定义OIDC提供商的登录页,让那边去做身份验证。
- 等那边验证通过,会把授权码发回给Keycloak,Keycloak再拿授权码去换用户信息,同样会在Y Realm本地建影子用户,后续要不要自动同步用户信息,也是你说了算。
2. 跨Realm的情况(如果你的业务需要跨Realm调用)
要是你有跨Realm的需求——比如X Realm的用户要访问Y Realm的资源,这时候得先给两个Realm配好信任关系(比如共享Realm角色或者Client Scopes),但就算这样,两种认证方式还是各管各的:
- 用户先在X Realm走完自定义用户联邦的认证流程,拿到X Realm的令牌。
- 当去访问Y Realm的资源时,Y Realm会先验证X Realm令牌的有效性,只要信任关系没问题,直接就授权了,不会触发Y Realm的OIDC代理(除非你特意配了强制二次认证)。
3. 要是想在同一个Realm里混着用两种认证方式
如果你哪天想在一个Realm里同时开用户联邦和OIDC代理,调整顺序的方法很简单:
- 进目标Realm的「Authentication」菜单,选「Flows」。
- 先复制默认的
Browser流程(别直接改默认的,万一搞砸了还能回滚)。 - 在复制出来的流程里,添加或者调整不同的认证执行器顺序——比如对应用户联邦的是
Username Password Form,对应OIDC代理的是OpenID Connect Identity Provider Redirector。 - 最后把修改好的流程设成这个Realm的默认浏览器认证流程就行。
内容的提问来源于stack exchange,提问作者Batuhan
相关产品推荐
相关产品推荐

