Wir verwenden eine keycloak 1.3.1 Authentifizierungsbibliothek und ich Ich habe bemerkt, dass IE (11), sobald ich den Schlüsselumhang mit { onLoad: 'login-required' } initialisiere, eine Endlosschleife bekommt ...

Andere Browser funktionieren einwandfrei.

Ich mache im Grunde das:

keycloak.init({ onLoad: 'login-required' }).success(function(authenticated) {
    console.info(authenticated ? 'authenticated' : 'not authenticated');

    some other stuff...

}).error(function() {
    console.warn('failed to initialize');
});

Irgendeine Idee, was es verursacht, und um dies zu lösen? Beim Versuch, die neueste Version 1.4.0 zu installieren, wird der seltsame Fehler behoben.

Danke im Voraus.

8
Nemanja Milosavljevic 20 Aug. 2015 im 16:50

3 Antworten

Beste Antwort

Ich hatte das gleiche Problem mit keycloak v1.5.0.Final / Internet Explorer 11 und fand schließlich heraus, was los ist.

1. Hinter den Kulissen

Wenn Sie die Modi 'login-required' oder 'check-sso' in der Init-Methode von Keycloak verwenden, Keycloak Javascript Adapter legt einen Iframe fest, der in zeitlichen Abständen überprüft, ob der Benutzer authentifiziert ist.

Dieser Iframe wird vom Server von keycloak abgerufen (sagen wir 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

Und sein Inhalt ist ein Javascript-Skript, mit dem auf das KEYCLOAK_SESSION-Cookie zugreifen kann, das zuvor von keycloak bei der Authentifizierung festgelegt wurde (auf derselben Domain, dh http(s)://yourkeycloakhost:port).

2. Das Problem mit dem IE

Ja! Hier ist das Problem mit Internet Explorer, der eine strenge Richtlinie für Iframes und Cookies hat. Tatsächlich hat der Keycloak-Iframe aufgrund seiner NICHT Zugriff auf die yourkeycloakhost Domain-Cookies. rel = "noreferrer"> P3P-Richtlinie (Microsoft Internet Explorer ist der einzige große Browser, der P3P unterstützt).

Dieses Problem wird in dieser Frage zum Stapelüberlauf ausführlich beschrieben

3. Auflösung

Die Lösung besteht darin, Internet Explorer der Domain unseres Keycloaks (yourkeycloakhost) für die Verwendung von Cookies zu vertrauen, damit der Iframe den Cookie-Wert KEYCLOAK_SESSION lesen und in seinen Daten registrieren kann.

Dazu muss Ihr Keycloak-Server den HTTP-Antwortheader mit P3P-Informationen anhängen . Sie können dies mit einem Apache- oder Nginx-Proxy tun, der immer die richtigen Header festlegt. Ich habe das mit Apache gemacht und es ist mod_headers Modul:

Header always set P3P "CP=ALL DSP COR CUR ADM PSA CONi OUR SAM OTR UNR LEG"

Sie können mehr über P3P mit W3C erfahren und / oder Ihre P3P-Richtlinie mit diesem P3P-Validator.

4. Folge

Sie können sich den iframe-Code von keycloak ansehen:

var cookie = getCookie('KEYCLOAK_SESSION');
if (cookie) {
    data.loggedIn = true;
    data.session = cookie;
}

Jetzt wird das Cookie in der Domain yourkeycloakhost vom Internet Explorer korrekt abgerufen und das Problem behoben!

14
Community 23 Mai 2017 im 12:09

Die Keycloak-Entwickler haben dieses Problem behoben, wie von @ François Maturel in Version 1.9.3 beschrieben. Weitere Informationen finden Sie unter # 2828.

4
Jacob van Lingen 1 Juni 2016 im 14:36

Eine Problemumgehung, die für mich funktioniert hat und aus der Keycloak-Dokumentation gelernt wurde, fügen Sie beim Ausführen der init-Methode den Parameter checkLoginIframe hinzu: .init({onLoad: 'login-required', checkLoginIframe: false})

7
yodamad 6 Sept. 2018 im 09:03