【问题标题】:Keycloak 4.3.0 Infinite Loop ScenarioKeycloak 4.3.0 无限循环场景
【发布时间】:2019-01-28 06:06:23
【问题描述】:

我已将 keycloak.js 包含在我的索引页面的头部。成功登录后,我将被重定向回我定义的重定向 URL,其中身份验证等于 true。但是,大约 5 秒后,页面重新加载并返回经过身份验证的 true。这只是循环发生,不知道从哪里开始。这是我的 html 中的内容:

<script src="/js/application/jquery/jquery-3.2.1.min.js"></script>
<script src="/js/application/keycloak.js"></script>
<script type="text/javascript">
$(document).ready(function() {
    var keycloak = Keycloak('keycloak.json');    
    keycloak.init({onLoad:'login-required', flow:'standard'}).success(function(authenticated) {         
        console.log('load app here');
    }).error(function() {
        alert('failed to initialize');
    });
});

我的 keycloak.json 是:

{
"realm": "myapp",
"auth-server-url": "https://localhost:8081/auth",
"ssl-required": "external",
"resource": "app",
"credentials": {
  "secret": "77296286-f52d-48d9-82ac-fcf287486110"
 },
 "confidential-port": 0,
 "policy-enforcer": {},
 }

非常感谢您提出的任何建议。这主要发生在 IE 11 中。我们有很多妈妈和流行客户仍在使用 IE 11,所以必须支持它。

我正在使用 4.3.0 中的 keycloak.js 并使用所有 java 4.3.0 适配器。

【问题讨论】:

    标签: keycloak keycloak-services


    【解决方案1】:

    修复了这个问题。问题不在于 chrome。问题是因为 iframe。 KeyCloak 在您的浏览器窗口中附加 iframe,然后 iframe 在响应返回之前向 KeyCloak 服务器发送一个请求进行身份验证,并且 iframe 更新有关响应的父窗口 KeyCloak 库正在附加一个 iframe,这会导致无限循环。所以我只是在 KeyCloak 库中添加了一个条件,如果 iframe 已经在窗口中,则不要附加新的 iframe。

    在 keycloak 服务的 init 方法中添加 "checkLoginIframe": true 它将解决您的问题。

    参考下面的github链接:

    https://github.com/dasniko/keycloak-reactjs-demo/issues/3

    【讨论】:

      【解决方案2】:

      就我而言, checkLoginIframe:false 并没有为我解决问题。在阅读了 keycloak iframe 的文档和这里的讨论之后,我重新审视了浏览器是问题的想法。

      我关闭了 Chrome 和 Safari 的第三方 cookie 阻止功能,而 Brave 则关闭了 Shields。刷新问题对我来说已经消失了。 MS Edge 不受此影响。

      以下文档提供了线索:https://github.com/keycloak/keycloak-documentation/blob/master/securing_apps/topics/oidc/javascript-adapter.adoc#modern-browsers-with-tracking-protection

      【讨论】:

      • 讨论有点老了,但我今天遇到了同样的问题,在勇敢上启用了 checkLoginIframe。我以无限循环结束,直到我禁用了勇敢的盾牌。
      【解决方案3】:

      在不改变代码的情况下解决这个问题的方法是像这样初始化它。

      keycloak.init({onLoad: 'login-required',"checkLoginIframe" : false})

      checkloginiframe 被禁用的地方

      【讨论】:

        猜你喜欢
        • 2015-11-14
        • 2021-10-21
        • 1970-01-01
        • 2017-11-22
        • 2015-07-31
        • 1970-01-01
        • 2019-04-01
        • 2015-06-16
        • 1970-01-01
        相关资源
        最近更新 更多