【发布时间】:2021-09-18 20:22:40
【问题描述】:
我正在尝试使用 Keycloak (13.0.1) 作为身份代理。我有一个 iOS 应用程序,它使用 keycloak 通过 OIDC 身份提供程序登录,然后使用令牌访问 spring-boot 后端。
我的问题是我根本无法让 keycloak 注销也让用户退出身份提供程序会话。
我花了几天时间在谷歌上搜索并查看 stackoverflow 和 keycloak discourse page 以及 git repo,但我找不到具体问题的答案。
使用邮递员测试,第一次点击“Get New Access Token”:
它成功地将我重定向到身份提供者登录页面(我使用 keycloak 提示绕过初始 keycloak 登录页面)。再次按下按钮将跳过 IDP 登录并直接给我令牌。多方便,至少我是这么想的……
问题是当我使用 keycloak 的 /logout 端点使刷新令牌无效时:
它成功返回 204,当我再次单击“获取新访问令牌”时,它会跳过登录表单并直接给我令牌,因此实际上无法注销用户然后使用其他用户登录。绕过此问题的唯一方法是手动单击“清除所有 cookie”按钮。
这是我的 IDP 配置:
另外请注意,在 keycloak admin guied 中指定 keycloak 应该在触发注销时注销 IDP,因此我似乎不应该进行任何特殊配置:
https://www.keycloak.org/docs/latest/server_admin/#identity-broker-logout
重要编辑:
我将此问题标记为已解决且解决方案正确,但我还需要关闭 IDP“反向通道注销”,因为我们公司的 SSO 不喜欢它。 Keycloak 似乎无论如何都可以注销。
【问题讨论】:
-
顺便说一句:iOS 应用程序无法保持客户端机密,因此不应使用客户端机密。您需要公共客户端和
Authorization Code with PKCE。我会推荐developer.okta.com/docs/concepts/oauth-openid/…了解更多详情 -
@JanGaraj 是的,我正在使用 PKCE。这个秘密主要是为了我用邮递员测试。
标签: spring-boot oauth-2.0 keycloak openid-connect logout