调用 /logout 端点后,Keycloak 未注销身份提供者

Keycloak not logging out the Identity provider after calling the /logout endpoint

我正在尝试使用 Keycloak (13.0.1) 作为身份代理。我有一个 iOS 应用程序,它使用 keycloak 通过 OIDC 身份提供商登录,然后使用令牌访问 spring-boot 后端。

我的问题是我根本无法让 keycloak 注销也将用户从身份提供程序会话中注销。

我花了好几天时间在谷歌上搜索并查看了 Whosebug 和 keycloak discourse 页面以及 git 回购,但我找不到我的具体问题的答案。

使用邮递员进行测试,第一次点击“Get New Access Token”:

它成功地将我重定向到身份提供者登录页面(我使用 keycloak 提示绕过初始 keycloak 登录页面)。再次按下按钮将跳过 IDP 登录并直接给我令牌。多方便啊,反正我是这么想的...

问题是当我使用 keycloak 的 /logout 端点使刷新令牌无效时:

它成功 returns 204,当我再次点击“获取新的访问令牌”时,它会跳过登录表单并直接给我令牌,所以实际上没有办法注销用户然后使用不同的用户登录。绕过这个的唯一方法是手动单击“清除所有 cookie”按钮。

这是我的 IDP 配置:

另请注意,在 keycloak admin guied 中指定 keycloak 应在触发注销时退出 IDP,因此我似乎不应该进行任何特殊配置:

https://www.keycloak.org/docs/latest/server_admin/#identity-broker-logout

重要编辑:

我将这个问题标记为已解决并且解决方案是正确的,但我还需要关闭 IDP“backchannel logout”,因为我们公司的 SSO 不喜欢它。 Keycloak似乎无论如何都能注销。

It successfully redirects me to the identity provider login page

重定向是关键。它打开一个浏览器,其中创建了 Keycloak cookie - 这是您的 IdP 会话。您必须在同一浏览器中打开 Keycloak /logout 端点,以便 Keycloak 可以清除自己的 Keycloak cookie。

总结:您必须 open/redirect(API 调用无效)用户使用与您相同的浏览器登录注销端点(API 调用无效)已用于登录。当然,对于某些特殊流程,情况可能并非如此,但它应该适用于标准授权代码 (with/without PKCE)。