# grommunio-auth mit Keycloak: SSO und zentrale Anmeldung Schritt für Schritt

Source: https://forgeone.solutions/de/tech/grommunio-auth-keycloak-2026-schritt-fuer-schritt
Language: de
Published: 2026-09-03
Updated: 2026-10-22

Zentrale Anmeldung für grommunio: grommunio-auth, Keycloak, Realm, User Federation, MFA, Login-Test, Logout-Redirect und Härtung.

## Kurzüberblick

Getestete Basis ist die openSUSE-basierte grommunio Appliance 2026.06.1. Die Beispiele verwenden durchgehend die neutrale Appliance-Domain https://mail.example.test; Pfade wie /web/, /admin/, /auth/, /chat/, /meet/ und /files/ liegen auf derselben Appliance.Dieser Beitrag zeigt, wie du grommunio-auth auf der bestehenden grommunio Appliance installierst und den grommunio-Realm in Keycloak sauber betreibst.

Meet-spezifische Adapter-Schritte gehören nicht hierher. Dieser Beitrag konzentriert sich auf grommunio-auth, grommunio Web, Keycloak, Federation, MFA, Discovery und Login-Flow.

## Getestete Umgebung

- grommunio 2026 auf der openSUSE-basierten grommunio Appliance.
- Alle Appliance-Befehle werden direkt auf der grommunio Appliance ausgeführt.
- Öffentliche Beispiele verwenden durchgehend die neutrale Appliance-Domain https://mail.example.test.

## Voraussetzungen

Ausgangspunkt ist eine installierte grommunio-Appliance, die über HTTPS unter https://mail.example.test erreichbar ist. Die Anleitung baut bewusst auf dem Installationsbeitrag der Serie auf: Erst die Groupware-Basis, danach Antispam, danach zentrale Anmeldung und MFA.

Für ein produktives Projekt brauchst du vor der Authentifizierungsumstellung einen festen FQDN, funktionierendes DNS, TLS, NTP, einen getesteten Admin-Zugang, aktuelle Pakete und einen Rückfallplan. SSO greift tief in den Loginpfad ein; deshalb prüfst du zuerst die Basisdienste und dokumentierst den aktuellen Zustand.

```bash
# Run on the grommunio appliance
hostname -f
cat /etc/os-release
rpm -q grommunio-auth grommunio-keycloak grommunio-web gromox grommunio-admin-api
systemctl is-active nginx php-fpm mariadb grommunio-keycloak gromox-http gromox-zcore
curl -k -I https://mail.example.test/web/
```

Erwartet wird der FQDN mail.example.test, aktive Dienste und ein HTTP-Header von grommunio Web. Wenn nginx oder grommunio-keycloak nicht aktiv sind, behebst du zuerst den Dienststatus, bevor du mit Keycloak-Clients oder MFA weitermachst.

## Schritt-für-Schritt-Anleitung

### 2.1 Pakete installieren und Dienste prüfen

Installiere grommunio-auth und grommunio-keycloak aus den konfigurierten grommunio-Repositories. Danach prüfst du, ob Keycloak lokal auf Port 9080 läuft und ob nginx die öffentlichen Pfade unter /auth bereitstellt.

```bash
# Run on the grommunio appliance
zypper refresh
zypper install grommunio-auth grommunio-keycloak
systemctl enable --now grommunio-keycloak nginx php-fpm mariadb
systemctl status grommunio-keycloak --no-pager
ss -ltnp | grep ':9080'
```

Wenn Port 9080 nicht lauscht, prüfst du zuerst journalctl -u grommunio-keycloak. Häufige Ursachen sind Datenbankzugriff, falsche Hostname-Werte oder ein fehlender Keycloak-Build nach der Paketinstallation.

### 2.2 grommunio-auth Setup starten

Das Setup verbindet die grommunio-Datenbank, Keycloak und die Web-Komponenten. Starte es interaktiv auf der Appliance und arbeite die Felder nacheinander ab.

```bash
# Run on the grommunio appliance
/usr/share/grommunio-auth/setup-grommunio-auth.sh
```

[![Start des grommunio-auth-Setups nach der Paketinstallation.](https://forgeone.solutions/media/grommunio-auth-setup-2026-01-start.png)](https://forgeone.solutions/media/grommunio-auth-setup-2026-01-start.png)

Trage den FQDN ein, unter dem Benutzer später wirklich arbeiten. In der validierten Umgebung ist das https://mail.example.test. Verwende keine Fantasie-URL und keinen lokalen Port, wenn Benutzer später über den echten Hostnamen zugreifen.

[![Wizard-Schritte für FQDN und lokale Keycloak-Datenbank.](https://forgeone.solutions/media/grommunio-auth-setup-2026-02-fqdn-database.png)](https://forgeone.solutions/media/grommunio-auth-setup-2026-02-fqdn-database.png)

Wähle als Provider die Keycloak-Integration und lasse das Setup die lokale grommunio-Keycloak-Anbindung vorbereiten. Danach validierst du die generierten Dateien und startest die relevanten Dienste neu.

[![Wizard-Schritte für grommunio-Benutzeranbindung, Keycloak-Admin und Management-Allowlist.](https://forgeone.solutions/media/grommunio-auth-setup-2026-03-grommunio-user-provider.png)](https://forgeone.solutions/media/grommunio-auth-setup-2026-03-grommunio-user-provider.png)

[![Abschluss und Validierung des grommunio-auth-Setups.](https://forgeone.solutions/media/grommunio-auth-setup-2026-04-validation.png)](https://forgeone.solutions/media/grommunio-auth-setup-2026-04-validation.png)

### 2.3 Realm grommunio öffnen und nicht im master-Realm arbeiten

Melde dich an der Keycloak Admin Console an und wechsle in den Realm grommunio. Der master-Realm ist nur für die Keycloak-Administration da. Die eigentliche grommunio-Anwendung, Benutzer-Federation, MFA-Policy und Broker-Anbindung werden im Realm grommunio gepflegt.

[![Keycloak Admin Console mit ausgewähltem Realm grommunio und Realm-Einstellungen.](https://forgeone.solutions/media/grommunio-auth-e2e-21-realm-grommunio-settings-clicked-1.png)](https://forgeone.solutions/media/grommunio-auth-e2e-21-realm-grommunio-settings-clicked-1.png)

Prüfe im Realm, dass Enabled aktiv ist und Require SSL auf External requests steht. Wenn du versehentlich im master-Realm arbeitest, landen Clients und Identity Provider an der falschen Stelle und grommunio Web findet später seine OIDC-Konfiguration nicht.

### 2.4 grommunio-Client prüfen

Öffne Clients im Realm grommunio. Dort muss der Client grommunio existieren. Dieser Client ist die OIDC-Anwendung, über die grommunio Web den Benutzer zu Keycloak leitet und anschließend Token prüft.

[![Clientliste im Keycloak-Realm grommunio mit dem Client grommunio.](https://forgeone.solutions/media/grommunio-auth-e2e-22-clients-list-clicked.png)](https://forgeone.solutions/media/grommunio-auth-e2e-22-clients-list-clicked.png)

Öffne den Client grommunio. In der getesteten Umgebung sind Root URL und Home URL auf https://mail.example.test:443/ gesetzt und die Redirect URI erlaubt https://mail.example.test/\*. In einer echten Umgebung setzt du hier die reale öffentliche URL deiner grommunio-Installation.

[![grommunio-Client in Keycloak mit Root URL, Home URL und Redirect URI.](https://forgeone.solutions/media/grommunio-auth-e2e-23-client-settings-clicked.png)](https://forgeone.solutions/media/grommunio-auth-e2e-23-client-settings-clicked.png)

Der Client ist confidential und verwendet Client ID plus Secret. Das Secret wird nicht veröffentlicht. Du kopierst es aus Keycloak und trägst es in /etc/gromox/keycloak.json ein.

[![Credentials-Tab des grommunio-Clients mit maskiertem Client Secret.](https://forgeone.solutions/media/grommunio-auth-e2e-33-client-credentials-direct.png)](https://forgeone.solutions/media/grommunio-auth-e2e-33-client-credentials-direct.png)

Prüfe außerdem die Client-Scopes. Standard-Scopes wie profile und email müssen verfügbar sein, weil grommunio Name und E-Mail-Adresse aus den OIDC-Claims benötigt. Der Audience-Mapper grommunio-audience sorgt dafür, dass Token die erwartete Audience für den grommunio-Client enthalten.

[![Client-Scopes im Keycloak-Realm grommunio.](https://forgeone.solutions/media/grommunio-auth-e2e-25-client-scopes-list-clicked.png)](https://forgeone.solutions/media/grommunio-auth-e2e-25-client-scopes-list-clicked.png)

```bash
# Run on the grommunio appliance
/usr/share/grommunio-keycloak/bin/kcadm.sh get clients \
  -r grommunio \
  -q clientId=grommunio \
  --fields id,clientId,enabled,redirectUris,webOrigins,standardFlowEnabled,directAccessGrantsEnabled,serviceAccountsEnabled

/usr/share/grommunio-keycloak/bin/kcadm.sh get clients/<CLIENT_UUID>/protocol-mappers/models \
  -r grommunio \
  --fields name,protocolMapper,config
```

Erwartet wird ein aktivierter OIDC-Client grommunio mit Standard Flow, passender Redirect URI und einem oidc-audience-mapper. Wenn der Mapper fehlt, erhalten Anwendungen zwar ein Token, aber die Audience-Prüfung kann fehlschlagen.

### 2.5 User Federation aus grommunio prüfen

Die Benutzer kommen in dieser Installation aus der grommunio-Umgebung. Öffne User federation im Realm grommunio und prüfe, ob der Provider grommunio aktiviert ist.

[![User-Federation-Provider grommunio im Keycloak-Realm grommunio.](https://forgeone.solutions/media/grommunio-auth-e2e-26-user-federation-list-clicked.png)](https://forgeone.solutions/media/grommunio-auth-e2e-26-user-federation-list-clicked.png)

Im Detailbild muss der Provider enabled sein. Damit kann Keycloak Benutzer aus grommunio sichtbar machen, ohne sie als lokale Keycloak-Accounts doppelt zu pflegen.

[![Detailseite des User-Federation-Providers grommunio in Keycloak.](https://forgeone.solutions/media/grommunio-auth-e2e-27-user-federation-detail-clicked.png)](https://forgeone.solutions/media/grommunio-auth-e2e-27-user-federation-detail-clicked.png)

Suche anschließend unter Users nach \*. In der getesteten Umgebung erscheinen synthetische Benutzer wie alex@example.test, alice@example.test, bob@example.test und meet@example.test. In Produktion würdest du hier deine echten grommunio-Benutzer sehen.

[![Synthetische Benutzer im Keycloak-Realm grommunio nach User-Suche.](https://forgeone.solutions/media/grommunio-auth-e2e-36-users-search-real.png)](https://forgeone.solutions/media/grommunio-auth-e2e-36-users-search-real.png)

### 2.6 MFA im grommunio-Realm aktivieren und Login prüfen

MFA gehört in den Realm grommunio, nicht in master. Öffne Authentication und arbeite mit dem Browser Flow beziehungsweise einer Kopie davon. Für produktive Umgebungen empfiehlt sich eine eigene Flow-Kopie, damit du Built-in-Flows nicht direkt veränderst.

[![Authentication-Flows im Keycloak-Realm grommunio.](https://forgeone.solutions/media/grommunio-auth-e2e-28-authentication-clicked.png)](https://forgeone.solutions/media/grommunio-auth-e2e-28-authentication-clicked.png)

Für den sauberen Einstieg aktivierst du MFA zuerst kontrolliert pro Benutzer. Öffne im Realm grommunio den Bereich Users, suche den gewünschten Benutzer, öffne den Benutzer und setze unter Required user actions die Aktion Configure OTP. Speichere den Benutzer danach.

1. Realm links oben auf grommunio stellen.
2. Users öffnen und den Benutzer suchen, zum Beispiel alex@example.test.
3. Benutzer öffnen und im Reiter Details beziehungsweise Required user actions Configure OTP hinzufügen.
4. Speichern und den Benutzer einmal vollständig abmelden lassen.
5. https://mail.example.test/web/ öffnen und den Login erneut ausführen.
6. Keycloak zeigt beim nächsten Login die TOTP-Einrichtung mit QR-Code. Der Benutzer scannt den Code mit einem Authenticator und bestätigt den ersten Einmalcode.

Wenn MFA für alle Benutzer verpflichtend werden soll, kopierst du im Realm grommunio den Browser Flow, ergänzt oder aktivierst die OTP-Prüfung als verpflichtenden Schritt und bindest diese Flow-Kopie unter Bindings als Browser flow. Das solltest du erst nach einem getesteten Break-Glass-Admin und dokumentiertem Rückweg aktivieren.

[![Echter Keycloak-Login mit scanbarem QR-Code für die MFA-Einrichtung.](https://forgeone.solutions/media/grommunio-auth-mfa-real-2026-01-login-qr-code.png)](https://forgeone.solutions/media/grommunio-auth-mfa-real-2026-01-login-qr-code.png)

Danach rufst du grommunio Web auf. Der Benutzer wird über Keycloak authentifiziert und landet nach erfolgreichem Login wieder in grommunio Web.

[![grommunio Web leitet nach der Auth-Einrichtung auf Keycloak um.](https://forgeone.solutions/media/grommunio-auth-2026-07-web-login.png)](https://forgeone.solutions/media/grommunio-auth-2026-07-web-login.png)

[![Erster Keycloak-Login mit Profilprüfung für den grommunio-Benutzer.](https://forgeone.solutions/media/grommunio-auth-2026-08-web-after-login.png)](https://forgeone.solutions/media/grommunio-auth-2026-08-web-after-login.png)

[![grommunio Admin Dashboard mit aktivem grommunio-keycloak-Dienst.](https://forgeone.solutions/media/grommunio-auth-2026-10-admin-overview.png)](https://forgeone.solutions/media/grommunio-auth-2026-10-admin-overview.png)

### 2.7 Bestehenden Keycloak als Broker anbinden

Wenn bereits ein zentraler Keycloak oder anderer OIDC-Provider existiert, bindest du ihn im Realm grommunio als Identity Provider ein. Im Lab wurde dafür ein zweiter Keycloak-Kontext auf derselben isolierten VM simuliert; in Produktion verwendest du den echten zentralen IdP mit seiner realen FQDN.

[![Identity Provider forgeone-keycloak im Keycloak-Realm grommunio.](https://forgeone.solutions/media/grommunio-auth-e2e-29-identity-providers-clicked.png)](https://forgeone.solutions/media/grommunio-auth-e2e-29-identity-providers-clicked.png)

Der Alias im Beispiel lautet forgeone-keycloak. Wichtig sind die Redirect URI im grommunio-Realm und die OIDC-Endpunkte des Upstream-Providers: Authorization URL, Token URL, Logout URL und User Info URL.

[![Broker-Konfiguration im Keycloak-Realm grommunio mit Redirect URI und OIDC-Endpunkten.](https://forgeone.solutions/media/grommunio-auth-e2e-30-identity-provider-detail-clicked.png)](https://forgeone.solutions/media/grommunio-auth-e2e-30-identity-provider-detail-clicked.png)

Lege auf dem Upstream-Keycloak einen confidential Client für den Broker an. Als Redirect URI verwendest du die Redirect URI, die Keycloak im grommunio-Realm beim Identity Provider anzeigt. Danach trägst du Client ID und Secret beim Broker ein. Das Secret wird nicht im Artikel veröffentlicht.

Für Logout-Rücksprünge braucht grommunio in dieser validierten Umgebung einen nginx-Redirect. Er gehört in den nginx-server-Kontext der grommunio-Web-Instanz, also zu der vHost-Konfiguration, die auch die /auth-Pfade für mail.example.test ausliefert. In der Appliance werden die Keycloak-Proxy-Locations aus /usr/share/grommunio-common/nginx/locations.d/grommunio-auth.conf eingebunden; die lokale Ergänzung gehört in die eigene nginx-Konfiguration, nicht in keycloak.conf.

```nginx
# /etc/nginx/conf.d/grommunio.conf
location ~ ^/auth/realms/grommunio/broker/[^/]+/endpoint/logout_response$ {
    return 302 $scheme://$host/web/;
}
```

```bash
# Run on the grommunio appliance
nginx -t
systemctl reload nginx
curl -k -I https://mail.example.test/auth/realms/grommunio/broker/forgeone-keycloak/endpoint/logout_response
```

Erwartet wird nach dem Reload ein HTTP 302 zurück auf /web/. Wenn stattdessen eine Keycloak-Fehlerseite erscheint, greift der nginx-Location-Block nicht im richtigen Server-Kontext oder wird von einer spezifischeren Location überholt.

### 2.8 Relevante Konfigurationsdateien prüfen

Nach dem Setup müssen die Dateien zueinander passen. Die öffentliche Browser-URL ist https://mail.example.test/auth/. Der interne Keycloak-Prozess lauscht lokal auf http://localhost:9080/auth und wird über nginx veröffentlicht.

```ini
# /etc/grommunio-keycloak/keycloak.conf
db=mariadb
proxy=edge
http-port=9080
http-relative-path=/auth
http-host=localhost
http-enabled=true
db-username=grommunio_keycloak
db-password=<REDACTED>
db-url-database=grommunio_keycloak
db-url-host=localhost
hostname=mail.example.test
hostname-strict=false
hostname-strict-https=false
proxy-headers=xforwarded
```

```ini
# /etc/grommunio-keycloak/grommunio.properties
grommunio.db-kind=org.mariadb.jdbc.Driver
grommunio.jdbc-url=jdbc:mariadb://localhost:3306/grommunio
grommunio.username=groauth
grommunio.password=<REDACTED>
```

```json
{
  "realm": "grommunio",
  "auth-server-url": "https://mail.example.test/auth/",
  "ssl-required": "external",
  "resource": "grommunio",
  "verify-token-audience": true,
  "credentials": {
    "secret": "<CLIENT_SECRET>"
  },
  "confidential-port": 0,
  "policy-enforcer": {
    "credentials": {}
  }
}
```

```nginx
# /etc/grommunio-common/nginx/auth_allow.conf
allow 10.0.2.0/24;
allow 127.0.0.1;
```

Die Datei /etc/gromox/keycloak.json muss für grommunio Web lesbar sein, aber nicht weltlesbar. In der validierten Umgebung ist die Datei root:groweb und 0640. Wenn die Gruppe oder Berechtigung falsch ist, kann der Login trotz korrektem Keycloak-Client scheitern.

```bash
# Run on the grommunio appliance
stat -c '%U:%G %a %n' /etc/gromox/keycloak.json /etc/grommunio-keycloak/keycloak.conf /etc/grommunio-keycloak/grommunio.properties
systemctl restart grommunio-keycloak nginx php-fpm gromox-http gromox-zcore
systemctl is-active grommunio-keycloak nginx php-fpm gromox-http gromox-zcore
```

### 2.9 Token, Discovery und Introspection prüfen

Vor der Abnahme prüfst du Discovery, Token-Ausstellung und Introspection. Damit stellst du sicher, dass nicht nur die UI funktioniert, sondern auch die OIDC-Grundlage für grommunio Web stimmt.

```bash
# Run on the grommunio appliance
curl -k https://mail.example.test/auth/realms/grommunio/.well-known/openid-configuration | jq '.issuer,.authorization_endpoint,.token_endpoint,.introspection_endpoint'

TOKEN_RESPONSE=$(curl -ks \
  -d grant_type=password \
  -d client_id=grommunio \
  -d client_secret='<CLIENT_SECRET>' \
  -d username='alex@example.test' \
  -d password='<USER_PASSWORD>' \
  -d scope='openid profile email' \
  https://mail.example.test/auth/realms/grommunio/protocol/openid-connect/token)

echo "$TOKEN_RESPONSE" | jq -r '.token_type,.expires_in'
```

Erwartet werden gültige OIDC-Endpunkte, ein Bearer Token und eine Ablaufzeit. Wenn ein invalid\_client erscheint, stimmen Client ID oder Secret nicht. Wenn invalid\_grant erscheint, prüfst du Benutzerpasswort, MFA-Status und Required Actions.

### 2.10 Audience-Mapper für Token-Introspection ergänzen

Wenn grommunio Web ein Access Token gegen Keycloak introspektiert, reicht azp=grommunio allein nicht aus. Das Token muss den grommunio-Client auch als Audience enthalten. Fehlt diese Audience, kann Keycloak ein INTROSPECT\_TOKEN\_ERROR mit invalid\_token loggen, obwohl der Login-Flow auf den ersten Blick korrekt wirkt.

Öffne dafür im Realm grommunio den Pfad Clients -> grommunio -> Client scopes -> grommunio-dedicated -> Mappers -> Add mapper -> By configuration -> Audience. Lege dort einen Mapper an, der die Client-Audience grommunio in Access Token und Token-Introspection schreibt. ID Token und Lightweight Access Token bleiben dafür deaktiviert.

```yaml
Mapper type: Audience
Name: grommunio-self-audience
Include Client Audience: grommunio
Add to ID token: Off
Add to access token: On
Add to lightweight access token: Off
Add to token introspection: On
```

Danach holst du ein neues Token. Ein altes Token ändert sich nicht nachträglich. Vor der Korrektur enthält der Token-Body typischerweise azp=grommunio, aber keine passende aud-Liste für grommunio. Nach der Korrektur muss aud den Wert grommunio enthalten.

```bash
# Run on the grommunio appliance, placeholders intentionally redacted
ACCESS_TOKEN='<ACCESS_TOKEN>'
printf '%s' "$ACCESS_TOKEN" | awk -F. '{print $2}' | base64 -d -i 2>/dev/null | jq '{azp,aud,scope}'

curl -k -sS -X POST \
  'https://mail.example.test/auth/realms/grommunio/protocol/openid-connect/token/introspect' \
  -u 'grommunio:<CLIENT_SECRET>' \
  -d "token=$ACCESS_TOKEN" | jq '{active,client_id,username,aud,azp,iss}'
```

Die Abnahme ist erst sauber, wenn Introspection active=true liefert und aud=grommunio sichtbar ist. Wenn die Introspection weiterhin invalid\_token meldet, prüfst du, ob der Mapper wirklich im Scope grommunio-dedicated des Clients grommunio liegt und ob ein neues Access Token verwendet wurde.

### 2.11 localhost:5000, gromox-http und IPv6-Loopback prüfen

Ein häufiger Stolperstein ist nicht Keycloak selbst, sondern die lokale grommunio-Kommunikation. In der validierten Appliance löst localhost zuerst auf ::1 auf, und gromox-http lauscht auf [::1]:5000. Wenn der lokale IPv6-Loopback deaktiviert oder gebrochen ist, können interne Komponenten auf localhost:5000 scheitern. Das ist kein Argument dafür, extern IPv6 freizuschalten; es betrifft die lokale Loopback-Kommunikation auf der Appliance.

```bash
# Run on the grommunio appliance
getent hosts localhost
getent ahosts localhost
sysctl net.ipv6.conf.all.disable_ipv6 net.ipv6.conf.default.disable_ipv6 net.ipv6.conf.lo.disable_ipv6
ip addr show lo
ss -tlnp | grep ':5000'
journalctl -u gromox-http -u gromox-zcore --since '30 minutes ago' --no-pager
```

Erwartet wird, dass lo die Adresse ::1/128 besitzt und gromox-http auf [::1]:5000 lauscht. Zusätzlich sollte /etc/gromox/gromox.cfg beziehungsweise die aktuell noch ausgewertete http.cfg zur laufenden gromox-Version passen. Wenn hier eine Abweichung auftaucht, korrigierst du zuerst Loopback, Dienststatus und gromox-Konfiguration, bevor du Keycloak-Claims suchst.

### 2.13 Reboot- und Persistenztest

Zum Abschluss startest du die Appliance neu und wiederholst die Kernprüfungen. SSO ist erst dann abgenommen, wenn Dienste, nginx, Discovery und Web-Login nach einem Neustart ohne manuelle Nacharbeit funktionieren.

```bash
# Run on the grommunio appliance
systemctl reboot

# After reconnecting
systemctl is-active grommunio-keycloak nginx php-fpm mariadb gromox-http gromox-zcore
curl -k -I https://mail.example.test/auth/realms/grommunio/.well-known/openid-configuration
curl -k -I https://mail.example.test/web/
```

### 2.12 Abschließender Login-Test mit grommunio Web

Der Auth-Test endet nicht bei einem Keycloak-Token. Für die praktische Abnahme wurde der komplette Benutzerweg definiert: https://mail.example.test/web/ öffnen, Redirect zu grommunio-auth/Keycloak, Login, MFA falls erzwungen, Redirect zurück nach grommunio Web, sichtbare Mailbox und Logout. Nur dieser Rückweg zählt als End-to-End-erfüllt.

- ✓ **grommunio Web vor Login:** Der Webclient leitet bei geschützten Bereichen zum vorgesehenen Loginweg.
- ✓ **Keycloak/grommunio-auth Login:** Der Benutzer kann sich im Realm grommunio anmelden.
- ✓ **MFA:** Eine Required Action oder MFA-Richtlinie wird abgefragt, wenn sie aktiviert ist.
- ✓ **Redirect zurück nach grommunio Web:** Nach erfolgreichem Login landet der Benutzer wieder im Webclient.
- ✓ **Mailbox sichtbar:** Das Postfach ist nach dem Login erreichbar.
- ✓ **Logout:** Abmelden beendet die Sitzung nachvollziehbar.

## Ergebniskontrolle / Technische Abnahme

| Prüfbereich | Prüfung | Erwartetes Ergebnis | Status |
| --- | --- | --- | --- |
| Installation | Pakete und Komponenten prüfen | Der Baustein ist vollständig installiert | PASS |
| Dienste | systemd-Services prüfen | Die notwendigen Dienste sind aktiv | PASS |
| Netzwerk | Ports und URLs prüfen | Der Baustein ist über die vorgesehenen Pfade erreichbar | PASS |
| Grundfunktion | Standalone-Test ausführen | Die Kernfunktion funktioniert vor der tieferen Integration | PASS |
| Authentifizierung | SSO/Login testen | Der Login funktioniert über den vorgesehenen Weg oder ist bewusst nicht erforderlich | PASS oder N/A |
| grommunio Web | Integration aus Web prüfen | Der Baustein ist aus grommunio Web erreichbar oder nutzbar | PASS oder N/A |
| End-to-End | Realen Benutzerworkflow testen | Der vollständige Workflow ist nachvollziehbar erfolgreich | PASS |
| Neustart | Dienste neu starten | Die Funktion bleibt nach einem Neustart erhalten | PASS |
| Logs | Relevante Logs kontrollieren | Keine blockierenden Fehler im geprüften Ablauf | PASS |

## Typische Fehler und Troubleshooting

### Falscher Realm

Fehlerbild: Der Client ist scheinbar angelegt, grommunio Web leitet aber nicht korrekt zu Keycloak oder findet den Client nicht. Ursache ist häufig, dass im master-Realm gearbeitet wurde. Lösung: Im Realm-Wechsler grommunio auswählen und Clients, User Federation, Authentication und Identity Providers dort prüfen.

### Redirect URI passt nicht

Fehlerbild: Keycloak meldet invalid\_redirect\_uri. Ursache ist eine URL-Abweichung zwischen Browser, nginx und Client-Konfiguration. Lösung: Root URL, Home URL, Valid Redirect URIs und /etc/gromox/keycloak.json auf denselben FQDN bringen.

### Client Secret falsch oder nicht lesbar

Fehlerbild: invalid\_client oder Login-Schleife. Ursache ist meist ein falsches Secret in /etc/gromox/keycloak.json oder eine zu restriktive Dateiberechtigung. Lösung: Secret im Credentials-Tab neu kopieren, Datei auf root:groweb 0640 setzen und Dienste neu starten.

### Broker-Logout endet auf einer Keycloak-Seite

Fehlerbild: Nach Logout über den vorgeschalteten Identity Provider landet der Benutzer nicht zurück in grommunio Web. Lösung: Den nginx-Redirect für /auth/realms/grommunio/broker/<alias>/endpoint/logout\_response im grommunio-vHost setzen, nginx -t ausführen und nginx neu laden.

### Token-Introspection scheitert mit INTROSPECT\_TOKEN\_ERROR

Fehlerbild: Keycloak protokolliert invalid\_token bei der Introspection, obwohl azp=grommunio im Token steht. Ursache: Der grommunio-Client fehlt als aud im Access Token. Lösung: Audience-Mapper grommunio-self-audience im grommunio-dedicated Scope des Clients grommunio anlegen, neues Token ausstellen und Introspection erneut prüfen.

### localhost:5000 ist nicht erreichbar

Fehlerbild: Login oder interne grommunio-Kommunikation scheitert rund um localhost:5000. Ursache: gromox-http lauscht lokal auf [::1]:5000, aber der IPv6-Loopback oder die Namensauflösung für localhost passt nicht. Lösung: ::1 auf lo, getent hosts localhost, gromox-http-Status und gromox-Konfiguration prüfen. Externe IPv6-Erreichbarkeit ist dafür nicht erforderlich.

## Fazit und Ausblick

Damit steht eine produktiv nachvollziehbare SSO-Basis für grommunio: Keycloak läuft hinter nginx, der Realm grommunio enthält Client, Federation, MFA-Flow, Audience-Mapper und optionalen Broker, und grommunio Web kann Benutzer zentral anmelden.

Der nächste logische Schritt in der Serie ist die gezielte SSO-Anbindung einzelner grommunio-Bausteine wie Meet, Chat und Files. Jeder Baustein bekommt dabei seinen eigenen Client, seine eigenen Redirects und eine eigene Abnahme, damit die Konfiguration wartbar bleibt.

Weiter in der Serie: [**grommunio Meet 2026 Schritt für Schritt**](https://forgeone.solutions/de/tech/grommunio-meet-2026-schritt-fuer-schritt), [**grommunio Chat für Teams und Mandanten betreiben**](https://forgeone.solutions/de/tech/grommunio-chat-2026-schritt-fuer-schritt) und [**grommunio Files und Office integrieren**](https://forgeone.solutions/de/tech/grommunio-files-office-2026-schritt-fuer-schritt).

## Quellen

Verwendete Hersteller- und Upstream-Dokumentation:

- [grommunio documentation](https://docs.grommunio.com/)
- [grommunio downloads and release information](https://download.grommunio.com/)
- [Keycloak documentation](https://www.keycloak.org/documentation)

## grommunio mit SSO und MFA einsetzen?

ForgeOne unterstützt dich bei grommunio-auth, Keycloak, Federation, MFA, Login-Flows, Migration und Betrieb.

- [SSO-Projekt besprechen](https://forgeone.solutions/de/kontakt)

## Titelbild

[![grommunio Web-Login als Kartenmotiv für zentrale Anmeldung mit Keycloak und MFA.](https://forgeone.solutions/media/grommunio-auth-2026-card.png)](https://forgeone.solutions/media/grommunio-auth-2026-card.png)

## Autor

Mathias Rumbold

## Kategorie

- [grommunio & Groupware](https://forgeone.solutions/de/tech/grommunio-auth-keycloak-2026-schritt-fuer-schritt?category=grommunio-groupware)

## Tags

- [grommunio](https://forgeone.solutions/de/tech/grommunio-auth-keycloak-2026-schritt-fuer-schritt?tags=grommunio)
- [grommunio Auth](https://forgeone.solutions/de/tech/grommunio-auth-keycloak-2026-schritt-fuer-schritt?tags=grommunio-auth)
- [Keycloak](https://forgeone.solutions/de/tech/grommunio-auth-keycloak-2026-schritt-fuer-schritt?tags=keycloak)
- [Identity Management](https://forgeone.solutions/de/tech/grommunio-auth-keycloak-2026-schritt-fuer-schritt?tags=identity-management)
- [SSO](https://forgeone.solutions/de/tech/grommunio-auth-keycloak-2026-schritt-fuer-schritt?tags=sso)
- [MFA](https://forgeone.solutions/de/tech/grommunio-auth-keycloak-2026-schritt-fuer-schritt?tags=mfa)
- [OpenID Connect](https://forgeone.solutions/de/tech/grommunio-auth-keycloak-2026-schritt-fuer-schritt?tags=openid-connect)
- [Groupware](https://forgeone.solutions/de/tech/grommunio-auth-keycloak-2026-schritt-fuer-schritt?tags=groupware)
- [Digitale Souveränität](https://forgeone.solutions/de/tech/grommunio-auth-keycloak-2026-schritt-fuer-schritt?tags=digitale-souveraenitaet)
- [Native Exchange Replacement](https://forgeone.solutions/de/tech/grommunio-auth-keycloak-2026-schritt-fuer-schritt?tags=native-exchange-replacement)

## grommunio SSO sauber planen

ForgeOne unterstützt bei grommunio-auth, Keycloak, MFA, User Federation und Login-Abnahme für produktive Umgebungen.

[SSO-Architektur besprechen](https://forgeone.solutions/de/produkte/grommunio/grommunio-auth)

## grommunio 2026 Schritt für Schritt

Die Beiträge bauen chronologisch aufeinander auf: Installation, Security, SSO, Module, Betrieb, Migration, Upgrade und Client-Abnahme. Veröffentlichte Teile werden automatisch verlinkt; geplante Fortsetzungen bleiben sichtbar, aber ohne 404-Link.

1. [grommunio 2026.06.1 installieren: Vom ISO zur lauffähigen Groupware](https://forgeone.solutions/de/tech/grommunio-2026-installieren)
2. [grommunio-antispam mit Rspamd: Spamfilterung, Lernen und Betrieb Schritt für Schritt](https://forgeone.solutions/de/tech/grommunio-antispam-rspamd-2026-schritt-fuer-schritt)
3. [grommunio-auth mit Keycloak: SSO und zentrale Anmeldung Schritt für Schritt (aktueller Teil)](https://forgeone.solutions/de/tech/grommunio-auth-keycloak-2026-schritt-fuer-schritt)
4. [grommunio Meet 2026 ohne Keycloak einrichten und optional mit SSO erweitern](https://forgeone.solutions/de/tech/grommunio-meet-2026-schritt-fuer-schritt)
5. [grommunio Chat 2026 einrichten: Teams, Kanäle, Benutzer und Mandantenfähigkeit testen](https://forgeone.solutions/de/tech/grommunio-chat-2026-schritt-fuer-schritt)
6. [grommunio Files und Office einrichten: Dateien, Web-Einstieg und Online-Office prüfen](https://forgeone.solutions/de/tech/grommunio-files-office-2026-schritt-fuer-schritt)
7. [grommunio Archive 2026 einrichten: E-Mails archivieren, suchen und wiederherstellen](https://forgeone.solutions/de/tech/grommunio-archive-2026-schritt-fuer-schritt)
8. [grommunio MDM 2026 Schritt für Schritt: ActiveSync-Geräte sicher verwalten](https://forgeone.solutions/de/tech/grommunio-mdm-2026-schritt-fuer-schritt)
9. [grommunio Multitenancy 2026: Organizations, Domains und mehrere LDAP-Quellen einordnen](https://forgeone.solutions/de/tech/grommunio-multitenancy-2026-schritt-fuer-schritt)
10. [grommunio 2026 Cluster und Hochverfügbarkeit: vom Multi-Server-Lab zum getesteten Active/Standby-Homeserver](https://forgeone.solutions/de/tech/grommunio-cluster-ha-2026-schritt-fuer-schritt)
11. [grommunio 2026 Disaster Recovery und Single-Mailbox-Restore: Backup, Full DR und gezielte Mailbox-Wiederherstellung im Lab](https://forgeone.solutions/de/tech/grommunio-disaster-recovery-single-mailbox-restore-2026-schritt-fuer-schritt)
12. [IMAP-Postfächer zu grommunio migrieren: Schritt für Schritt mit imapsync](https://forgeone.solutions/de/tech/grommunio-imap-migration-imapsync-2026-schritt-fuer-schritt)
13. [grommunio: Public Folder durch ein Funktionspostfach ersetzen - Schritt für Schritt](https://forgeone.solutions/de/tech/grommunio-public-folder-funktionspostfach-mehrere-domains)
14. [grommunio Web 5.0 im Lab: Settings-Namespace, Shared Mailboxes und Admin-Folgen](https://forgeone.solutions/de/tech/grommunio-web-5-0-im-lab)
15. [grommunio 2026.06.2 Upgrade und technische Abnahme: Keycloak SSO, MFA, AutoDiscover und Mailflow](https://forgeone.solutions/de/tech/grommunio-2026-06-2-upgrade-keycloak-sso-praxis)
16. [grommunio native Clients nach Keycloak SSO: Thunderbird, Outlook, EWS, EAS und MFA richtig einordnen](https://forgeone.solutions/de/tech/grommunio-native-clients-keycloak-sso-2026)
17. grommunio Monitoring und Alerting im Betrieb
18. grommunio Security Hardening in der Praxis
19. grommunio Operations Troubleshooting: typische Fehler sauber eingrenzen

## Weiterführende Inhalte

- [Identity & Access mit Open Source und Enterprise-Support](https://forgeone.solutions/de/produkte/identity-access)
- [Keycloak](https://forgeone.solutions/de/produkte/keycloak)
- [FreeIPA](https://forgeone.solutions/de/produkte/freeipa)
- [Single Sign-On (SSO)](https://forgeone.solutions/de/single-sign-on-sso)
