Keycloak 4.3.0 无限循环场景

use*_*498 5 keycloak keycloak-services

我已将 keycloak.js 包含在索引页面的头部。成功登录后,我将被重定向回我定义的重定向 url,其中authentiated 等于 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');
    });
});
Run Code Online (Sandbox Code Playgroud)

我的 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": {},
 }
Run Code Online (Sandbox Code Playgroud)

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

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

小智 2

修复了这个问题。问题不在于 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