Keycloak 无限重定向

Posted

技术标签:

【中文标题】Keycloak 无限重定向【英文标题】:Keycloak infinite redirect 【发布时间】:2017-04-07 05:33:53 【问题描述】:

我们使用的是Keycloak 2.3.0.Final,我们使用的是/auth/js/keycloak.js 提供的javascript 适配器。使用此适配器的应用程序是 React+Redux 应用程序,但这并不重要。

当我们通过docs 中描述的身份验证过程时,初始身份验证是成功的,但是当login-status-iframe.html 尝试刷新令牌时,我们会得到 403 Forbidden。 它用于刷新令牌 /auth/realms/<customer-realm>/protocol/openid-c…id=web-portal&origin=http%3A%2F%2Flocalhost%3A8080&session_state=undefined 的确切 URL。 这会导致一次又一次的重定向。

我假设这会中断,因为 session_state 参数是 undefined,但遗憾的是我找不到有关此主题的任何文档。

我该如何解决这个问题?

【问题讨论】:

你找到答案了吗? No 不是真正的答案,请检查所有版本是否匹配。因为每个版本的 keycloak 都带有自己的 keycloak.js。 【参考方案1】:

我在使用 keycloak 时遇到了类似的问题,但您的解决方案可能不一样。

根本原因是,我启动了多个 keycloak 实例,但负载均衡器没有粘性会话。因此,每次请求在不同的实例上进行时,该 cookie 在该实例上无效,它会重定向到登录,并且由于它已登录,该过程将再次重复。

对于解决方案,我将 keycloak 简化为一个实例,我正在查看有关如何运行 keycloak 集群的 keycloak 文档。

【讨论】:

【参考方案2】:

这几乎肯定会发生,因为您的路由器处于“散列”模式并为路由使用散列。我还没有弄清楚如何让 keycloak javascript 适配器与基于散列模式的路由一起正常工作,但至少你应该知道这是你面临的问题。在 Vue 中,您可以将路由器设置为“历史”模式,它可以在没有哈希的情况下工作,这样就解决了问题。我打赌 React 具有相同的功能,作为一种变通方法。

(我意识到这个问题很老了,但它出现在了duckduckgo搜索的顶部,并且在当前版本的javascript适配器中仍然存在这个问题,所以我觉得它可以使用答案)

【讨论】:

我有同样的问题,我正在使用 Vue 和 vue-router。我添加了mode: 'history',但这个解决方案对我没有帮助。【参考方案3】:

我不知道您是否找到了解决方案,但我最近也遇到了这个问题。在这个issue thread 中,用户 djmason9 的解决方案对我有用。只需为initOptions 参数添加checkLoginIframe: false

【讨论】:

这为我解决了一个问题,我在初始化选项中使用了onLoad: 'check-sso'。在我添加 checkLoginIframe: false 选项之前,初始化失败。【参考方案4】:

我遇到了同样的问题,我解决了这个问题,将我的 keycloak 客户端上的 web 源添加到“*”

【讨论】:

【参考方案5】:

确保 Keycloak 配置中的 Web Origins 没有尾部斜杠。

查看返回 403 的 URL,尤其是 origin 参数。该值应包含在相应客户端的 Web Origin 中定义的值。

我遇到了这个问题,然后解决了它

【讨论】:

以上是关于Keycloak 无限重定向的主要内容,如果未能解决你的问题,请参考以下文章

为啥 keycloak 会删除重定向 uri 中的 SSL?

根据角色将不同的用户重定向到 Keycloak 登录的不同页面

Dokku keycloak 重定向过多

如何在使用 keycloak 进行身份验证时处理 uri 重定向

如何将角度应用程序从keycloak登录重定向到特定路线

无需重定向到 Keycloak 的客户端身份验证