【问题标题】:Keycloak infinite redirectKeycloak 无限重定向
【发布时间】: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。

标签: javascript reactjs openid http-status-code-403 keycloak


【解决方案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 中定义的值。

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

      【讨论】:

        猜你喜欢
        • 2021-10-21
        • 2021-12-17
        • 1970-01-01
        • 2019-07-26
        • 2021-02-22
        • 2018-10-17
        • 2020-12-29
        • 2017-04-10
        • 2016-12-18
        相关资源
        最近更新 更多