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 登录的不同页面