Keycloak-Client einrichten
Schritt für Schritt mit Screenshots: Client typo3-v14 im Realm sonia anlegen – Zugriff, Protokoll, Abmeldung, Client-Secret, Rollen, Mapper und Client Scopes.
Worum es geht
TYPO3 meldet sich bei Keycloak als vertraulicher OpenID-Connect-Client an. Diese Seite beschreibt den Client typo3-v14 im Realm sonia so, wie er in der lokalen SONIA-Umgebung eingerichtet ist. Die Screenshots zeigen die deutsche Oberfläche der Keycloak-Admin-Konsole (Keycloak 26) unter https://id.dev.sonia.de/admin/.
Den Client legt man unter Clients → Client erstellen an (Typ OpenID Connect, Client-ID typo3-v14) und füllt danach die Reiter wie unten beschrieben aus. Auf einem Server ersetzt man http://typo3-v14.localhost:8088 durch die öffentliche Adresse der TYPO3-Installation.
Was TYPO3 mit den Rollen und Abmeldungen macht, steht auf der Seite „Anmeldung über Keycloak“.
1. Zugriffseinstellungen
Reiter Einstellungen, Abschnitt Zugriffseinstellungen:
| Feld | Wert | Hinweis |
|---|---|---|
| Root URL, Home-URL | http://typo3-v14.localhost:8088 | Basis für relative Adressen |
| Valid redirect URIs | /* | relativ zur Root URL; TYPO3 kehrt nach dem Login nach /typo3/… zurück |
| Valid post logout redirect URIs | http://typo3-v14.localhost:8088/typo3/login | Ziel nach dem Single Logout |
| Web Origins | beliebig | wird nicht benötigt: Der Login läuft serverseitig, nicht per JavaScript |
| Admin URL | beliebig | wird von TYPO3 nicht verwendet |
2. Protokolleinstellungen
- Client-Authentifizierung: An – vertraulicher Client mit Client-Secret (Schritt 4).
- Autorisierung: Aus
- Authentifizierungsablauf: nur Standard-Flow (Authorization Code). Direct access grants, Implicit flow und die übrigen Verfahren bleiben aus.
- Erzwinge PKCE: An, PKCE Methode: S256 – causal/oidc sendet die PKCE-Parameter mit (
enableCodeVerifierinadditional.php). - Erzwinge DPoP: Aus
3. Abmeldeeinstellungen
| Feld | Wert |
|---|---|
| Abmeldung über Front-Channel | Aus |
| Back-Channel Abmelde-URL | http://host.docker.internal:8088/oidc/backchannel-logout |
| Back-Channel-Abmeldung für Sitzung erforderlich | An (Pflicht) |
| Back-Channel-Abmeldungen widerrufen Offline-Sitzungen | Aus |
| Logout confirmation | Aus |
Keycloak läuft lokal im Docker-Netz lr7 und erreicht TYPO3 über host.docker.internal:8088. Auf einem Server trägt man die öffentliche TYPO3-Adresse ein.
TYPO3 ordnet Logout-Tokens ausschließlich über die Keycloak-Session-ID sid zu. Ohne „Sitzung erforderlich“ fehlt die sid, und TYPO3 lehnt das Token mit 400 ab. Mit „Logout confirmation“ zeigt Keycloak nach dem Abmelden eine Bestätigungsseite, statt zur TYPO3-Login-Seite zurückzuleiten.
Danach unten auf Speichern klicken.
4. Client-Secret in die .env übernehmen
Reiter Zugangsdaten: Client-Authentifikator „Client Id and Secret“, das Client-Secret kopieren und in die .env der Appliance eintragen:
TYPO3_OIDC_ISSUER=https://id.dev.sonia.de/realms/sonia
TYPO3_OIDC_CLIENT_ID=typo3-v14
TYPO3_OIDC_CLIENT_SECRET=<Client-Secret>Danach docker compose up -d. Das Secret gehört nur in die .env, nie in versionierte Dateien, Tickets oder Screenshots.
5. Client-Rollen anlegen und zuweisen
Reiter Rollen → Rolle erstellen: die Rollen admin und editor anlegen (ohne Zusammensetzung).
Zuweisen unter Benutzer bzw. Gruppen → Reiter Rollenzuweisung → Rolle zuweisen, dort nach Client-Rollen filtern und typo3-v14 admin oder typo3-v14 editor wählen. Benutzer ohne eine dieser Rollen werden in TYPO3 nicht angelegt.
6. Mapper für den Claim „Roles“
Reiter Client Scopes → typo3-v14-dedicated → Mapper hinzufügen → Nach Konfiguration → User Client Role:
| Feld | Wert |
|---|---|
| Name | Roles |
| Client-ID | typo3-v14 |
| Client Role prefix | leer |
| Mehrere Werte | An |
| Token Claim Name | Roles (großes R) |
| Claim JSON-Typ | String |
| Add to ID token, access token, lightweight access token, token introspection | Aus |
| Zur UserInfo hinzufügen | An |
causal/oidc liest die Rollen ausschließlich aus dem Claim Roles der Userinfo-Antwort. In den Tokens werden sie nicht gebraucht.
7. Client Scopes prüfen
Zugeordnet sind typo3-v14-dedicated (mit dem Mapper aus Schritt 6), acr, basic und profile als Standard sowie email als optional. TYPO3 fordert openid profile email an (TYPO3_OIDC_SCOPES) und erhält damit auch die E-Mail-Adresse.
Im Realm sonia setzt der Scope profile den stabilen Benutzernamen (soniaExternalUid, eid…) als preferred_username. Darüber ordnet TYPO3 die Backend-Benutzer zu; die interne Keycloak-ID ändert sich bei jedem LDAP-Neuimport.
Prüfen lässt sich das Ergebnis unter Client Scopes → Auswerten: Benutzer wählen, dann zeigt die generierte Userinfo die Claims preferred_username und Roles.
8. Testen
http://typo3-v14.localhost:8088/typo3/öffnen: Der OIDC-Login ist vorausgewählt und leitet zu Keycloak weiter.- Nach der Anmeldung landet man im Backend. Der Benutzer heißt wie
preferred_usernameund gehört zur Gruppe „Admin (Keycloak)“ oder „Editor (Keycloak)“. - Abmelden im Backend meldet auch bei Keycloak ab (Single Logout). Umgekehrt beendet „Abmelden“ in der Keycloak-Kontoverwaltung oder das Löschen der Sitzung in der Admin-Konsole die TYPO3-Sitzung (Back-Channel).
Ergebnisse protokolliert oidc_backend in var/log/typo3_oidc_*.log. Fehlerbilder und Debug-Logging stehen auf der Seite „Anmeldung über Keycloak“.