SSO-Integration: Keycloak mit dem MB connect line Portal konfigurieren
Dieser Artikel beschreibt die Schritte zur Konfiguration von Single Sign-On (OpenID Connect) zwischen einer beliebigen Keycloak-Instanz und dem MB connect line Gatekeeper-Portal.
Keycloak vorbereiten
Schritt 1: Realm-URL ermitteln
Die Basis-URL eines Keycloak-Realms hat folgendes Format:
https://<keycloak-host>/realms/<realm-name>
Im Folgenden wird <REALM_URL> als Platzhalter für diese Basis-URL verwendet.
Schritt 2: OIDC Discovery prüfen
Jeder Keycloak-Realm stellt automatisch einen Discovery-Endpoint bereit:
<REALM_URL>/.well-known/openid-configuration
Dieser liefert alle Endpoint-URLs. Prüfen Sie die Erreichbarkeit:
curl -s <REALM_URL>/.well-known/openid-configuration | jq .
Aus der Antwort benötigen Sie:
| Discovery-Feld | Portal-Einstellung |
| issuer | Domain (ISS) |
| authorization_endpoint | Authorization Endpunkt |
| token_endpoint | Secure Token Endpunkt / Refresh Token Endpunkt |
| jwks_uri | JWKS Metadata Endpunkt |
Schritt 3: Client anlegen
In der Keycloak Admin Console unter Clients > Create client:
| Einstellung | Wert | Erklärung |
| Client type | OpenID Connect | |
| Client ID | frei waehlbar (z.B. portal-sso) | Wird im Portal als "Client ID" eingetragen |
| Client authentication | On | Confidential Client — erzeugt ein Client Secret |
| Authorization | Off | UMA/Fine-grained Auth nicht benötigt |
| Standard flow | An | Authorization Code Flow (Pflicht) |
| Direct access grants | Optional | Nur für Tests nützlich (Password Grant) |
| Service account roles | Optional | Nur wenn Client Credentials Grant benötigt |
| Implicit flow | Aus | Veraltet, nicht benötigt |
Nach dem Speichern finden Sie das Client Secret unter dem Tab Credentials.
Schritt 4: Redirect-URI konfigurieren
Unter dem Tab Settings des Clients:
| Einstellung | Wert |
| Valid redirect URIs | <https://<portal-host>>/portal/index.php?option=com_sso |
| Web origins | <https://<portal-host>> |
Schritt 5: Signatur-Algorithmus prüfen
Unter Clients > \
| Einstellung | Empfohlener Wert |
| ID Token Signature Algorithm | RS256 (Default) |
| Access Token Signature Algorithm | RS256 (Default) |
Schritt 6: Benutzer anlegen
Unter Users > Add user einen Benutzer erstellen. Pflichtfelder:
-
Username (wird als preferred_username im JWT ausgegeben)
-
Email (wird als email im JWT ausgegeben)
-
First name + Last name (werden als name, given_name, family_name ausgegeben)
-
Email verified: An
Setzen Sie unter dem Tab Credentials ein Passwort.
Portal konfigurieren
Im Portal-Backend
Schritt 1: Navigieren Sie zum Bereich: Zugriff
| Feld | Wert | Quelle |
| Aktiv | Ja | — |
| Client ID | <Ihr Client ID> | Keycloak: Client ID (Schritt 3) |
| Client Secret | <Ihr Secret> | Keycloak: Clients > Credentials |
| Domain (ISS) | <REALM_URL> | Discovery: issuer |
| JWKS Metadata Endpunkt | <REALM_URL>/protocol/openid-connect/certs | Discovery: jwks_uri |
| Authorization Endpunkt | <REALM_URL>/protocol/openid-connect/auth | Discovery: authorization_endpoint |
| Secure Token Endpunkt | <REALM_URL>/protocol/openid-connect/token | Discovery: token_endpoint |
| Refresh Token Endpunkt | <REALM_URL>/protocol/openid-connect/token | Gleiche URL wie Token Endpunkt |
| Scope | openid profile email | Leerzeichengetrennt |
Schritt 2: Navigieren Sie zum Bereich: Sicherheit
| Feld | Wert |
| Auth Typ | Code |
| Grant Typ | Authorization Code |
| Algorithmus | RS256 |
Schritt 3: Navigieren Sie zum Bereich: Standard-Benutzerdaten
Diese Felder bestimmen, aus welchem JWT-Claim das Portal den Benutzernamen und die E-Mail-Adresse liest. Der Wert muss einem gültigen Claim-Namen aus dem id_token entsprechen.
| Feld | Empfohlener Wert | Alternativen | Beschreibung |
| Benutzerinfo: Feld für Namen | name | given_name, preferred_username, family_name | Bestimmt den Anzeigenamen im Portal |
| Benutzerinfo: Feld für E-Mail | — | Primärer Identifikator für die User-Zuordnung |
Verifizierung
Schritt 1: Schnelltest mit curl
Prüfen Sie ob der Keycloak-Server vom Portal-Server erreichbar ist:
# Auf dem PORTAL-SERVER ausführen:
curl -v https://<keycloak-host>/realms/<realm>/.well-known/openid-configuration
Erwartetes Ergebnis: HTTP 200 mit JSON-Response. Bei Fehlern prüfen Sie bitte:
-
DNS-Auflösung (nslookup <keycloak-host>)
-
TLS-Zertifikat (muss vom Portal-Server vertraut werden)
-
Firewall (Port 443 offen)
Schritt 2: Token-Anfrage testen
curl -s -X POST "<REALM_URL>/protocol/openid-connect/token" \
--data-urlencode "grant_type=password" \
--data-urlencode "client_id=<client-id>" \
--data-urlencode "client_secret=<client-secret>" \
--data-urlencode "username=<username>" \
--data-urlencode "password=<password>" \
--data-urlencode "scope=openid profile email" | jq .
Erwartete Antwort:
{
"access_token": "eyJ...",
"id_token": "eyJ...",
"token_type": "Bearer",
"expires_in": 300,
"scope": "openid profile email"
}
Schritt 3: id_token prüfen
Den Payload eines JWT dekodieren (ohne Signaturprüfung):
echo "<id_token>" | cut -d. -f2 | base64 -d 2>/dev/null | jq .
Erwartete Claims:
{
"iss": "<REALM_URL>",
"aud": "<client-id>",
"name": "Max Mustermann",
"email": "max@example.com",
"email_verified": true,
"given_name": "Max",
"family_name": "Mustermann",
"preferred_username": "maxm"
}