微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决Keycloak 在调用 /logout 端点后未注销身份提供者

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

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

我花了几天的时间在谷歌上搜索并查看了 stackoverflow 和 keycloak 讨论页面和 git repo,但我找不到我的具体问题的答案。

使用postman测试,第一次点击“Get New Access Token”:

using postman to get token

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

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

postman logout

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

这是我的 IDP 配置:

IDP config

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

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

重要编辑:

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

解决方法

它成功地将我重定向到身份提供者登录页面

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

总结:您必须将(API 调用不起作用)用户打开/重定向(API 调用不起作用)到您登录时使用的注销端点(API 调用不起作用)的同一浏览器。当然,对于某些特殊流程可能不是这种情况,但它应该适用于标准授权代码(有/没有 PKCE)。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。