Keycloak 4.3.0 无限循环场景

5

我已经在index页面的head部分包含了keycloak.js文件。成功登录后,我被重定向到我的指定重定向URL,此时authenticated等于true。然而,大约5秒钟后,页面重新加载并返回authenticated 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适配器。

4个回答

2

已经解决了这个问题。问题不在于Chrome浏览器,而是因为一个iframe。KeyCloak会将iframe附加到您的浏览器窗口中,然后iframe会向KeyCloak服务器发送身份验证请求,直到响应返回并更新父窗口关于KeyCloak库响应的内容。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

1
讨论有点旧了,但我今天在启用了勇敢浏览器的checkLoginIframe时遇到了同样的问题。直到我禁用了勇敢浏览器的防护盾,我才结束了无限循环。 - gavard.e

0

我在使用React和Keycloak 19.0.0时遇到了同样的问题。通过移除<React.StrictMode>解决了这个问题。


0

解决此问题而不更改代码的方法是像这样进行初始化。

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

其中checkloginiframe被禁用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接