7.0 KiB
Plan: Fix Flaw 1 (Service Unavailable) + Flaw 2 (Theme Layout)
Flaw 1: "Service Unavailable" nach OIDC-Login
Diagnose
Symptom: Nach erfolgreichem Keycloak-Login zeigt grommunio-web "Unknown error - Service Unavailable".
Log-Evidenz:
zcore[25984]: rhost=[] user= zs_logon_token rejected: Token did not validate
Wichtig: user= ist LEER -- zcore kann keinen User aus dem Token extrahieren.
Was funktioniert:
- PHP OIDC-Flow:
login() returned 0 (NOERROR)-- Keycloak-Auth OK - bearer_pubkey: Korrekt, gleicher Key wie Keycloak, lesbar für gromox-User
- keycloak.json: Korrekt konfiguriert mit
realm-public-keyundprincipal-attribute - Alle Services: nginx, php-fpm, gromox-http, gromox-zcore laufen
Vermutete Ursache: Die PHP-Schicht (grommunio-web) authentifiziert sich erfolgreich bei Keycloak, aber wenn sie den Bearer-Token an gromox-zcore weiterreicht (mapi_logon_token()), schlaegt die Token-Validierung in zcore fehl. Der leere user= deutet darauf hin, dass zcore den Token nicht parsen oder die Claims nicht extrahieren kann.
Schritt 1: gromox-zcore Neustart + Live-Test
ssh root@10.0.0.23 'systemctl restart gromox-zcore && sleep 2 && systemctl status gromox-zcore --no-pager'
Dann im Browser einloggen und sofort Logs pruefen:
ssh root@10.0.0.23 'journalctl -u gromox-zcore --since "1 min ago" --no-pager'
Schritt 2: JWT-Token aus Keycloak dekodieren
Ein Token von Keycloak holen und die Claims pruefen:
# Token holen (Resource Owner Password Grant fuer Test)
TOKEN=$(curl -s -X POST "https://auth.egonetix.de/realms/egonetix/protocol/openid-connect/token" \
-d "grant_type=password" \
-d "client_id=grommunio" \
-d "username=robert.wiegand@egonetix.de" \
-d "password=<pw>" | jq -r '.access_token')
# Token dekodieren (ohne Signatur-Check)
echo "$TOKEN" | cut -d. -f2 | base64 -d 2>/dev/null | jq .
Pruefen ob folgende Claims vorhanden:
iss=https://auth.egonetix.de/realms/egonetixaud= enthaeltgrommuniooderaccountpreferred_username=robert.wiegand@egonetix.desub= UUID des Usersazp=grommunio
Schritt 3: gromox-zcore Debug-Logging erhoehen
ssh root@10.0.0.23 'sed -i "s/log_level=6/log_level=1/" /etc/gromox/zcore.cfg && systemctl restart gromox-zcore'
Log-Level 1 = maximales Logging. Nach Test zuruecksetzen auf 6.
Schritt 4: PHP MAPI Token-Uebergabe pruefen
Pruefen was genau grommunio-web an zcore uebergibt:
ssh root@10.0.0.23 'grep -n "logon_token\|mapi_logon\|bearer\|zs_logon" /usr/share/php-mapi/class.keycloak.php /usr/share/grommunio-web/server/includes/core/*.php 2>/dev/null'
Schritt 5: Direct Access Grants pruefen
Falls grant_type=password nicht erlaubt ist (Public Client), per Browser-DevTools:
- https://mail.egonetix.de oeffnen
- DevTools Network-Tab
- Login durchfuehren
- Token-Exchange-Request finden und access_token kopieren
- Manuell dekodieren
Schritt 6: Fix anwenden
Basierend auf Diagnose -- moegliche Fixes:
A) Token-Claim-Problem: Keycloak Mapper anpassen (preferred_username muss E-Mail enthalten) B) Audience-Problem: Keycloak Client Scope anpassen C) gromox-Config: Fehlende Config-Option in zcore.cfg/http.cfg D) PHP-Code: grommunio-web uebergibt falsches Token-Format an zcore
Flaw 2: Keycloak Theme Layout kaputt
Diagnose
Screenshot-Analyse (Auswahl_2145.jpg):
- Berg-Hintergrund: OK
- Login-Card (weiss/glassmorphism): Rechts positioniert, OK
- Logo "egonetix" + "IT SOLUTIONS": LINKS neben der Card, halb verdeckt
- "Log in" Titel: LINKS unter dem Logo, ausserhalb der Card
- Nur Formularfelder (Username, Button, Passkey-Hint) sind IN der Card
Root Cause: Keycloak v2 template.ftl rendert den DOM so:
<div class="pf-v5-c-login__main">
<div class="pf-v5-c-login__main-header"> <-- Header-Section (Logo + Titel)
<h1 id="kc-page-title">...</h1>
</div>
<div class="pf-v5-c-login__main-body"> <-- Body-Section (Formular)
...
</div>
</div>
Das CSS applied Card-Styling NUR auf .pf-v5-c-login__main-body, NICHT auf den Parent .pf-v5-c-login__main. Deshalb sind Logo und Titel AUSSERHALB der visuellen Card.
Theme-Dateien (auf srvdocker02)
| Datei | Pfad |
|---|---|
| CSS | /home/icke/keycloak/themes/egonetix/login/resources/css/egonetix.css |
| login.ftl | /home/icke/keycloak/themes/egonetix/login/login.ftl |
| login-username.ftl | /home/icke/keycloak/themes/egonetix/login/login-username.ftl |
| logout-confirm.ftl | /home/icke/keycloak/themes/egonetix/login/logout-confirm.ftl |
| theme.properties | /home/icke/keycloak/themes/egonetix/login/theme.properties |
Fix: CSS umstrukturieren
Kern-Aenderung: Card-Styling von .pf-v5-c-login__main-body auf .pf-v5-c-login__main verschieben.
/* Card auf den PARENT anwenden (umschliesst Header + Body) */
.pf-v5-c-login__main {
background: var(--ego-card-background) !important;
backdrop-filter: var(--ego-card-backdrop) !important;
-webkit-backdrop-filter: var(--ego-card-backdrop) !important;
border-radius: var(--ego-border-radius) !important;
box-shadow: var(--ego-card-shadow) !important;
border: 1px solid rgba(255, 255, 255, 0.3) !important;
padding: var(--ego-card-padding) !important;
width: var(--ego-card-width) !important;
max-width: 90vw !important;
margin: 0 auto !important;
}
/* Kinder transparent machen (kein doppelter Card-Effekt) */
.pf-v5-c-login__main-header,
.pf-v5-c-login__main-body,
#kc-form,
#kc-content-wrapper,
#kc-form-wrapper {
background: transparent !important;
box-shadow: none !important;
border: none !important;
padding: 0 !important;
width: 100% !important;
border-radius: 0 !important;
backdrop-filter: none !important;
-webkit-backdrop-filter: none !important;
}
Zusaetzlich: .pf-v5-c-login__main Layout korrigieren:
.pf-v5-c-login__main {
display: flex;
flex-direction: column;
align-items: center;
}
Schritt-fuer-Schritt
-
egonetix.css auf srvdocker02 editieren:
- Card-Styling von
#kc-form, .pf-v5-c-login__main-body, #kc-content-wrapper, #kc-form-wrapperentfernen - Card-Styling auf
.pf-v5-c-login__mainsetzen - Alle Kinder (header, body, form-wrapper) transparent machen
- Layout-Anpassung:
.pf-v5-c-login__mainals flex-column
- Card-Styling von
-
Keycloak-Cache leeren (Theme-Aenderungen erfordern Cache-Clear oder Restart):
ssh root@10.0.0.48 'docker restart keycloak' -
Browser-Test: https://auth.egonetix.de/realms/egonetix/account -> Logo + Titel + Formular alle IN der Card
Reihenfolge
- Flaw 2 zuerst (Theme-Fix) -- CSS-Aenderung auf srvdocker02, schnell verifizierbar
- Flaw 1 danach (Service Unavailable) -- erfordert iteratives Debugging auf srvmail01
Verifikation
- Flaw 2: Browser -> https://mail.egonetix.de -> Keycloak-Login-Seite zeigt Logo + Titel INNERHALB der Card
- Flaw 1: Browser -> Login -> kein "Service Unavailable" Dialog, Mailbox oeffnet sich