SSO-Konfigurationsbeispiel des Identitäsanbieters Keycloak
Dieser Artikel beschreibt die notwendige Konfiguration innerhalb des Identitätsanbieters Keycloak, um eine SSO Anmeldung bereitzustellen.
Schritt 1: Keycloak lokal starten
In unserem Beispiel nutzen wir Keycloak in Verbindung mit Docker und starten Keycloak lokal gemäß der Anleitung Erste Schritte mit Keycloak auf Docker.
docker run -p 127.0.0.1:8080:8080 -e KC_BOOTSTRAP_ADMIN_USERNAME=admin -e KC_BOOTSTRAP_ADMIN_PASSWORD=admin quay.io/keycloak/keycloak:26.6.4 start-dev
Über ein Terminal wird Keycloak lokal über den Port 8080 gestartet und ein Admin-Benutzer admin mit dem Passwort admin angelegt. Keycloak sollte nun über http://localhost:8080 im Webbrowser erreichbar sein.
Schritt 2: Realm anlegen
Ein Realm ist bei Keycloak grob vergleichbar mit einem Tenant/Mandanten. Keycloak beschreibt Realms als isolierte Bereiche für Anwendungen und Benutzer.
In der Admin Console:
-
In der Navigation auf Manage realms klicken.
-
Create realm klicken.
-
Realm Name: customx

-
Create-Schaltfläche klicken.

Ab jetzt lautet der lokale Issuer:
http://localhost:8080/realms/customx
Zum Prüfen kann diese URL geöffnet werden:
http://localhost:8080/realms/customx/.well-known/openid-configuration
Der .well-known/openid-configuration-Endpunkt ist der zentrale OIDC-Metadaten-Endpunkt von Keycloak (Keycloak-Guides).
Schritt 3: Testbenutzer für den Login anlegen
In der Admin Console:
- Prüfen, ob customx der aktuelle Realm ist.
- In der Navigation auf Users klicken.
- Create new user klicken.
- Beispiel:
Email verified: On
Username: r_zufall
Email: rainer.zufall@muster.com
First name: Rainer
Last name: Zufall
- Create klicken.
- Den Tab Credentials wechseln.
- Set password klicken.
- Passwort festlegen. Zum Beispiel
Password: test1234
Temporary: Off
- Save klicken.
- Save password klicken.
Schritt 4: Web-Client anlegen
In der Admin Console:
- Prüfen, ob customx der aktuelle Realm ist.
- In der Navigation auf Clients klicken.
- Create client klicken.
-
Beispiel:
Client type: OpenID Connect
Client ID: customx-web
Name: customX Web
-
Next klicken.
-
Capability config:
Client authentication: Off
Authorization: Off
Standard flow: On
Direct access grants: optional Off
Require PKCE: On
PKCE Method: S256
-
Next klicken.
- Login settings:
Valid redirect URIs:
http://localhost/CustomXApp/Start.html
Valid post logout redirect URIs:
http://localhost/CustomXApp/Start.html
Web origins:
http://localhost
-
Save klicken.

Schritt 5: API-Client anlegen
In der Admin Console:
- Prüfen, ob customx der aktuelle Realm ist.
- In der Navigation auf Clients klicken.
- Create client klicken.
- Beispiel:
Client type: OpenID Connect
Client ID: customx-api
Name: customX API
- Next klicken.
- Capability config:
Client authentication: Off
Authorization: Off
Standard flow: Off
Direct access grants: Off
Require PKCE: Off
- Next klicken.
- Login settings:

- Save klicken.

Schritt 6: Client Scope anlegen
In der Admin Console:
- Prüfen, ob customx der aktuelle Realm ist.
- In der Navigation auf Client scopes klicken.
- Create client scope klicken.
-
Beispiel:
Name: customx-user-access
Type: Default
Protocol: OpenID Connect
Display on consent screen: On
Consent screen text: Zugriff auf customX
Include in token scope: On
-
Save klicken.
Schritt 7: Client Scope dem Web-Client zuordnen
In der Admin Console:
- Prüfen, ob customx der aktuelle Realm ist.
- In der Navigation auf Clients klicken.
- customx-web klicken.
- Den Tab Client scopes wechseln.
-
Add client scope klicken.

-
Add klicken.
-
Optional klicken.

Die customX Anwendung nutzt nun die Scopes openid profile email customx-user-access.
Schritt 8: Audience Mapper anlegen
In der Admin Console:
- Prüfen, ob customx der aktuelle Realm ist.
- In der Navigation auf Client scopes klicken.
- customx-user-access klicken.
- Den Tab Mappers wechseln.
- Configure a new mapper klicken.
-
Mapper type Audience klicken.
Name: customx-api-audience
Included Client Audience: customx-api
Add to access token: On
-
Save klicken.

Schritt 9: customX konfigurieren
- "C:\customX\Config\customX.ini" öffnen.
-
Einstellungen eintragen.
[SSO]
Authentication=3
[OpenIdConnectAuthentication]
issuer=http://localhost:8080/realms/customx
redirect-uri=http://localhost/CustomXApp/Start.html
web-client-id=customx-web
api-client-id=customx-api
scopes=customx-user-access
[SSOParameterMapping]
cxEmail=email
Schritt 10: (Optional) Benutzerdefinierte Anwendungsansprüche (Claims) übergeben
Benutzerattribute anlegen
Es können beliebig viele Benutzerattribute angelegt werden. Hier zwei Beispiele:
In der Admin Console:
- Prüfen, ob customx der aktuelle Realm ist.
- In der Navigation auf Realm settings klicken.
- Den Tab User profile wechseln.
-
Create attribute klicken.
General settings
Attribute [Name]: customerId
Display name: Kunden-ID
Permissions
Who can edit? Admin
Who can view? User, Admin
-
Create klicken.

-
Create attribute klicken.
General settings
Attribute [Name]: configuratorUserRole
Display name: Konfigurator Benutzerrolle
Default value: standard
Permissions
Who can edit? Admin
Who can view? User, Admin
-
Create klicken.
Benutzerattribute Werte setzen
In der Admin Console:
- Prüfen, ob customx der aktuelle Realm ist.
- In der Navigation auf Users klicken.
- Testbenutzer r_zufall klicken.
- Wert Kunden-ID setzen.
-
Wert Konfigurator Benutzerrolle überprüfen.

-
Save klicken.
Anwendungsanspruch dem Token hinzufügen
In der Admin Console:
- Prüfen, ob customx der aktuelle Realm ist.
- In der Navigation auf Client scopes klicken.
- customx-user-access klicken.
- Den Tab Mappers wechseln.
- Add mapper klicken.
-
By configuration klicken.

-
User Attribute klicken.
Name: customer-id-mapper
User Attribute: customerId
Token Claim Name: customer-id
Claim JSON Type: String
Add to access token: On
Add to ID token: optional
Add to userinfo: optional
-
Save klicken.
-
Add mapper klicken.
-
By configuration klicken.
-
User Attribute klicken.
Name: configurator-user-role-mapper
User Attribute: configuratorUserRole
Token Claim Name: configurator-user-role
Claim JSON Type: String
Add to access token: On
Add to ID token: optional
Add to userinfo: optional
-
Save klicken.

Die Mappers sollten in einem Client Scope (hier: customx-user-access) angelegt werden, die dem Web-Client (hier: customx-web) zugeordnet sind.
Mapping in den customX-Einstellungen hinzufügen
- "C:\customX\Config\customX.ini" öffnen.
-
Einstellungen eintragen.
[SSOParameterMapping]
cxEmail=email # Bereits in Schritt 9 gesetzt
IdentityProviderCustomerID=customer-id
IdentityProviderConfiguratorUserRole=configurator-user-role
Schritt 11: Access token überprüfen
- Webbrowser öffnen.
- DevTools öffnen z. B. Taste F12 drücken.
- Tab Network/ Netzwerk öffnen.
- customX Startseite aufrufen (http://localhost/CustomXApp/Start.html).
- SSO-Button klicken.
- In Keycloak authentifizieren.
- Im Network-Tab im Filter nach
tokensuchen. - Token auswählen.
- Tab Preview auswählen

- access_token Wert kopieren.
- JSON-Web Token encoder öffnen (https://www.jwt.io/).
- Access-Token encoden.
- Inhalt auf wichtige Claims prüfen.
{
...
"iss": "http://localhost:8080/realms/customx",
"aud": [
"customx-api",
...
],
...
"azp": "customx-web",
...
"scope": "openid email customx-user-access profile",
...
"customer-id": "4711",
"name": "Rainer Zufall",
"preferred_username": "r_zufall",
"given_name": "Rainer",
"family_name": "Zufall",
"email": "rainer.zufall@muster.com",
"configurator-user-role": "standard"
}
Das bedeutet:
| Claim | Bedeutung | Bewertung |
|---|---|---|
| iss | Aussteller (Issuer) des Tokens | Sollte zum Realm passen |
| aud | Zielanwendung (Audience) des Tokens | customx-api ist enthalten |
| azp | Autorisierte Anwendung, die das Token angefordert hat | customX-web ist korrekt |
| scope | Berechtigungen (Scopes), die dem Benutzer erteilt wurden | customx-user-access ist enthalten |
| customer-id | Benutzerdefinierter Claim | vorhanden |
| configurator-user-role | Benutzerdefinierter Claim | vorhanden |
