Nem*_*vic 7 javascript angularjs keycloak
我们正在使用keycloak 1.3.1身份验证库,我注意到一旦我初始化了keycloak { onLoad: 'login-required' }
,IE(11)就会获得无限循环......
其他浏览器工作正常.
我基本上是这样做的:
keycloak.init({ onLoad: 'login-required' }).success(function(authenticated) {
console.info(authenticated ? 'authenticated' : 'not authenticated');
some other stuff...
}).error(function() {
console.warn('failed to initialize');
});
Run Code Online (Sandbox Code Playgroud)
知道是什么导致它,并解决这个问题?尝试安装最新版本1.4.0,希望奇怪的bug得到解决.
提前致谢.
Fra*_*rel 14
我遇到了与keycloak v1.5.0.Final/Internet Explorer 11相同的问题,最后弄明白了发生了什么.
在Keycloak的init方法中使用模式'login-required'或'check-sso'时,Keycloak Javascript Adapter会设置一个iframe,以定时间隔检查用户是否经过身份验证.
这个iframe是从keycloak的服务器中检索出来的(比如说http(s)://yourkeycloakhost:port
):
http(s)://yourkeycloakhost:port/auth/realms/yourrealm/protocol/openid-connect/login-status-iframe.html?client_id=yourclientid&origin=http(s)://yourorigin
Run Code Online (Sandbox Code Playgroud)
它的内容是一个javascript脚本,它应该能够访问以前由keycloak在身份验证上设置的KEYCLOAK_SESSION cookie(在同一个域上http(s)://yourkeycloakhost:port
).
是! 以下是Internet Explorer的问题,它具有严格的iframe和Cookie策略.实际上,keycloak IFRAME确实不具备访问yourkeycloakhost
由于其域的Cookie P3P政策(Microsoft Internet Explorer中是唯一的主要的浏览器支持P3P).
解决方案是让Internet Explorer信任我们的keycloak的域(yourkeycloakhost
)以使用cookie,以便iframe能够读取KEYCLOAK_SESSION
cookie值,并将其注册到其数据中.
为此,您的keycloak服务器必须附加带有P3P信息的HTTP响应头.您可以使用apache或nginx代理来执行此操作,该代理将始终设置正确的标头.我用apache和它的mod_headers模块做到了:
Header always set P3P "CP=ALL DSP COR CUR ADM PSA CONi OUR SAM OTR UNR LEG"
Run Code Online (Sandbox Code Playgroud)
您可以通过W3C了解有关P3P的更多信息和/或使用此P3P验证器验证您的P3P策略.
您可以查看keycloak的iframe代码:
var cookie = getCookie('KEYCLOAK_SESSION');
if (cookie) {
data.loggedIn = true;
data.session = cookie;
}
Run Code Online (Sandbox Code Playgroud)
现在yourkeycloakhost
Internet Explorer正确检索域上的cookie ,问题得到解决!
从keycloak文档中了解到的对我有用的解决方法是checkLoginIframe
在执行init方法时添加参数:.init({onLoad: 'login-required', checkLoginIframe: false})
归档时间: |
|
查看次数: |
4251 次 |
最近记录: |