Keycloak执行登出后无法同步登出Azure Active Directory用户问题咨询
Keycloak 集成 Azure AD 单点登出异常解决方案
问题本质是仅调用Keycloak登出接口仅清除了Keycloak侧的用户会话,未同步触发上游Azure AD的联邦登出流程,Azure AD侧仍保留有效用户会话,因此用户二次登录时会直接被Azure AD免密认证通过。
可用后端实现方案
- 方案1:启用Keycloak原生联邦登出能力(无额外代码开发,推荐)
Keycloak原生支持上游身份提供商的同步登出,只需做如下配置即可:- 登录Keycloak管理控制台,进入对应realm,依次点击「身份提供商」- 你配置的Azure AD实例
- 在配置页找到「单点登出服务URL」项,填入Azure AD登出端点:
https://login.microsoftonline.com/<你的Azure AD租户ID>/oauth2/v2.0/logout,若使用Azure政府版则替换为https://login.microsoftonline.us/<你的Azure AD租户ID>/oauth2/v2.0/logout - 开启「启用单点登出」开关后保存配置
配置完成后,你原有的后端调用Keycloak登出APIhttps://keycloaktest:8443/auth/realms/<realmName>/protocol/openid-connect/logout的逻辑无需修改,Keycloak会自动同步调用Azure AD的登出接口,清除Azure AD侧的用户会话。
- 方案2:后端主动调用Azure AD登出接口
如果你需要自己控制登出流程,可在调用Keycloak登出接口后,额外新增调用Azure AD登出接口的逻辑:- 从用户信息中获取对应的Azure AD租户ID、用户唯一标识
- 第一种方式:调用Azure AD公开登出端点
https://login.microsoftonline.com/<Azure AD租户ID>/oauth2/v2.0/logout,可可选携带post_logout_redirect_uri参数指定登出后跳转地址 - 第二种方式(完全后端静默登出,无需浏览器参与):调用Microsoft Graph的
revokeSignInSessions接口,直接作废指定用户的所有Azure AD登录会话,该方案需要你的后端服务预先申请User.ReadWrite.All或Directory.ReadWrite.All的Graph API应用权限。
注意:如果你的场景使用Azure AD政府版,所有涉及login.microsoftonline.com的地址都需要替换为login.microsoftonline.us。
内容的提问来源于stack exchange,提问作者noble
相关产品推荐
相关产品推荐

