【问题标题】:Keycloak not logging out the Identity provider after calling the /logout endpoint调用 /logout 端点后,Keycloak 未注销身份提供程序
【发布时间】: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


【解决方案1】:

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

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

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

【讨论】:

  • 好的,这是有道理的,但是 Keycloak 的 /logout url 需要一个 POST 方法,所以我不确定如何在浏览器中做到这一点。编辑:为了澄清,iOS应用程序开发人员说整个登录过程都会打开safari浏览器(idk,我不是iOS开发人员),所以大概就是隐藏cookie的地方,所以按照你的建议做,她需要以某种方式通过该浏览器发送 POST 吗?她正在使用 AppAuth,如果这有所作为的话。我不确定该库是否具有处理注销的“本机”方式。
  • @MihaiP。恕我直言,注销是一个标准的 GET 请求 keycloak.org/docs/latest/securing_apps For other browser applications, you can redirect the browser to http://auth-server/auth/realms/{realm-name}/protocol/openid-connect/logout?redirect_uri=encodedRedirectUri, which logs you out if you have an SSO session with your browser. 令牌撤销是一个 POST 请求。但是注销端点!= 撤销端点。
  • 现在可以使用了!好吧。我强迫邮递员使用浏览器获取 OIDC 内容,然后使用文档中的注销 url。最初它把我重定向到一个错误页面,上面写着“使用身份提供者进行身份验证时出现意外错误”,但是当我再次尝试“获取新令牌”时,它让我重新登录。哇哦!该错误可能与不匹配的配置或重定向 url 有关,或者我们的公司 SSO 可能只是坏的,但至少它是进步的!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-01-14
  • 2018-07-22
  • 2013-05-01
  • 2023-01-20
  • 2020-09-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多