
Ich versuche, SSO mit einem Browser (Chrome oder Firefox) und Keycloak zum Laufen zu bringen, der mit einer AD-Domäne mit Benutzerföderation konfiguriert ist (Kerberos ist konfiguriert).
Zuerst gebe ich einen Überblick über das, was ich habe, und füge dann weitere Details hinzu.
Der Überblick:
Wenn ich den Autorisierungsendpunkt ".../auth/realms/test_realm/protocol/openid-connect/auth" aufrufe und tcpdump verwende, kann ich Folgendes sehen:
Der Browser sendet eine Get-Anfrage mit den erforderlichen Parametern an den Autorisierungsendpunkt.
Keycloak antwortet korrekt:
- mit einer 401 Unauthorized
- mit dem Header „WWW-Authenticate: Negotiate“Der Browser sendet meiner Meinung nach korrekt eine neue Get-Anfrage:
-mit "Authorization: Negotiate TlRMTVNTUAABAAAAl4II4gAAAAAAAAAAAAAAAAAAAAAAAAAKAGFKAAAADw=="
Dies sendet das Spnego-TokenKeycloak antwortet mit „200 OK“, aber mit der Anmeldeseite und ohne Token oder Rückruf-URL habe ich keine Fehler im Keycloak-Protokoll
F: Was soll Keycloak hier antworten? Es sollte an die Callback-URL mit einigen Cookies gesendet werden, wieKEYCLOAK_IDENTITUndKEYCLOAK_SESSION, richtig? Mit diesen Cookies kann ich den Token-Endpunkt aufrufen, um das Token zur Verwendung in der Anwendung abzurufen.
F: Irgendeine Idee, was fehlt? Ich weiß, es sind viele Teile, aber vielleicht fehlt etwas Offensichtliches.
Bei einer manuellen Anmeldung rufe ich einen Anmeldeaktions-/Authentifizierungsendpunkt auf, der die Cookies KEYCLOAK_IDENTIT und KEYCLOAK_SESSION zurückgibt, die ich verwenden kann, um den Tokenendpunkt aufzurufen und das Token abzurufen.
Ich verwende denselben Benutzer wie den, der sich von der Testdomäne aus angemeldet hat, daher weiß ich, dass Keycloak den getesteten Benutzer authentifizieren kann.
Jetzt mit mehr Details
Um Keycloak zu konfigurieren, folgte ich den offiziellen Dokumenten vonhttps://www.keycloak.org/docs/latest/server_admin/
Auf dem Windows-Client-Computer (Browser Chrome oder Firefox, beide getestet):
- Ich habe die URL zur Whitelist hinzugefügt.
- Ich rufe den Autorisierungsendpunkt mit den erforderlichen Parametern auf.
In der AD-Domäne von Windows Server 2019
- Ich habe eine Keytab-Datei erstellt mit:
ktpass /out testdomainlocal_keytab_file.keytab /princ HTTP/[email geschützt]/mapuser keycloak_kerberos /pass "somepass" /crypto All /ptype KRB5_NT_PRINCIPAL /kvno 1
-Der Benutzer keycloak_kerberos existiert in meiner Testdomäne
In Linux Rhel8.8 habe ich Keycloak 22.01
– habe die Linux-Maschine mithilfe von „Realm Join“ zur Testdomäne hinzugefügt
– habe die eingerichtete Benutzerföderation für ein LDAP-AD hinzugefügt, das den LDAP-Testbenutzer manuell authentifizieren kann
– habe die Kerberos-Integration mit dem Auftraggeber und dem aus der AD-Maschine erstellten Keytab
aktiviert – habe die Domäneninformationen zur Datei /etc/krb5.conf hinzugefügt.
Ich kann bei Bedarf weitere Details anzeigen, aber ich muss die Informationen anonymisieren.