Neu: Anmeldung über Keycloak und andere OpenID-Connect-Anbieter #43

Merged
thiel merged 1 commit from oidc into main 2026-10-09 09:05:42 +00:00
Owner

Neu: Anmeldung über Keycloak und jeden anderen OpenID-Connect-Anbieter (Entra ID, Google, Authentik …).

Entscheidungen (mit Markus abgestimmt): Konten werden beim ersten Login automatisch angelegt; Gruppen und Rollen werden zugeordnet; Passwort-Login bleibt, ist aber abschaltbar; die Einrichtung erfolgt im Admin-Bereich.

Ablauf

  • Autorisierungscode mit PKCE (S256), Nonce, state verschlüsselt und an den Browser gebunden (Cookie, 10 Minuten).
  • Das ID-Token wird ohne externe Bibliothek geprüft:
    • Signatur über JWKS (RS/PS/ES); bei Schlüsselwechsel wird einmal neu geladen.
    • Aussteller, Zielgruppe/azp, Ablauf.
  • Userinfo wird ergänzend gelesen, weil Keycloak Gruppen oft nur dort liefert.
  • Rücksprung nur auf relative /app/…-Ziele (kein offener Redirect).
  • Abmelden beendet auch die Sitzung beim Anbieter (end_session_endpoint mit id_token_hint). Das ID-Token liegt dafür verschlüsselt in der Sitzung.

Konten und Rechte

  • Neue Tabellen identity_providers und user_identities, Sitzungen um den Anbieter erweitert (Migration 0031).
  • Erster Login: Das Konto wird als Mitglied ohne Rechte angelegt. Abschaltbar, auf E-Mail-Domains beschränkbar.
  • Bestehende Konten werden über die E-Mail nur verknüpft, wenn email_verified gesetzt ist oder „E-Mail vertrauen“ eingeschaltet ist (Schutz vor Kontoübernahme). Danach dient sub als feste Kennung.
  • Zuordnung: Wert (Keycloak-Gruppe oder -Pfad, Realm- bzw. Client-Rolle, beliebiger Claim) → Fobu-Gruppe oder Administrator.
    • Bei jedem Login wird nur für zugeordnete Gruppen abgeglichen.
    • Der letzte Administrator wird nie herabgestuft.
  • Passwort-Anmeldung: „für alle“ oder „nur Administratoren“ (Notzugang). Das lässt sich nur einschränken, wenn ein Anbieter aktiv ist.
  • Konten, die nur per SSO entstanden sind, haben kein Passwort. „Mein Konto“ verweist dann auf den Anmeldedienst.
  • /me liefert hasPassword. Die Benutzerliste zeigt „über Anmeldedienst“.

Oberfläche

  • Administration › Anmeldung:
    • Umleitungs- und Abmelde-URI zum Kopieren, Keycloak-Hinweise
    • Anbieter anlegen und bearbeiten (mit „Prüfen“), Zuordnungen, Erweitert (Claim, Scopes)
    • Passwort-Anmeldung
  • Anmeldeseite: Knöpfe je Anbieter, Fehlermeldung nach der Rückkehr. Bei „nur Administratoren“ ist das Passwortformular eingeklappt.

Doku: README, docs/03 (Keycloak Schritt für Schritt), Handbuch Teil F und PDF.

Tests

  • API mit Keycloak-Testdouble (eigener RSA-Schlüssel, JWKS, Token, Userinfo):
    • erster Login mit Gruppen, zweiter Login mit geänderten Rollen, Abmelden beim Anbieter, Protokoll
    • manipulierte Signatur, falsche Zielgruppe, fremder Browser, unbestätigte E-Mail bei vorhandenem Konto
    • Domains, kein automatisches Anlegen, Passwort-Anmeldung nur für Administratoren
    • Secret verschlüsselt, Prüfen, unbekannte Gruppe
  • E2E (Chromium, WebKit): Einrichtung im Admin-Bereich, Knopf auf der Anmeldeseite, Fehlermeldung.

🤖 Generated with Claude Code

https://claude.ai/code/session_015z57Agxa5kZg6szB3zFN3x

Neu: Anmeldung über Keycloak und jeden anderen OpenID-Connect-Anbieter (Entra ID, Google, Authentik …). Entscheidungen (mit Markus abgestimmt): Konten werden beim ersten Login automatisch angelegt; Gruppen und Rollen werden zugeordnet; Passwort-Login bleibt, ist aber abschaltbar; die Einrichtung erfolgt im Admin-Bereich. **Ablauf** - Autorisierungscode mit PKCE (S256), Nonce, `state` verschlüsselt und an den Browser gebunden (Cookie, 10 Minuten). - Das ID-Token wird ohne externe Bibliothek geprüft: - Signatur über JWKS (RS/PS/ES); bei Schlüsselwechsel wird einmal neu geladen. - Aussteller, Zielgruppe/`azp`, Ablauf. - Userinfo wird ergänzend gelesen, weil Keycloak Gruppen oft nur dort liefert. - Rücksprung nur auf relative `/app/…`-Ziele (kein offener Redirect). - Abmelden beendet auch die Sitzung beim Anbieter (`end_session_endpoint` mit `id_token_hint`). Das ID-Token liegt dafür verschlüsselt in der Sitzung. **Konten und Rechte** - Neue Tabellen `identity_providers` und `user_identities`, Sitzungen um den Anbieter erweitert (Migration 0031). - Erster Login: Das Konto wird als Mitglied ohne Rechte angelegt. Abschaltbar, auf E-Mail-Domains beschränkbar. - Bestehende Konten werden über die E-Mail nur verknüpft, wenn `email_verified` gesetzt ist oder „E-Mail vertrauen“ eingeschaltet ist (Schutz vor Kontoübernahme). Danach dient `sub` als feste Kennung. - Zuordnung: Wert (Keycloak-Gruppe oder -Pfad, Realm- bzw. Client-Rolle, beliebiger Claim) → Fobu-Gruppe oder Administrator. - Bei jedem Login wird nur für zugeordnete Gruppen abgeglichen. - Der letzte Administrator wird nie herabgestuft. - Passwort-Anmeldung: „für alle“ oder „nur Administratoren“ (Notzugang). Das lässt sich nur einschränken, wenn ein Anbieter aktiv ist. - Konten, die nur per SSO entstanden sind, haben kein Passwort. „Mein Konto“ verweist dann auf den Anmeldedienst. - `/me` liefert `hasPassword`. Die Benutzerliste zeigt „über Anmeldedienst“. **Oberfläche** - Administration › Anmeldung: - Umleitungs- und Abmelde-URI zum Kopieren, Keycloak-Hinweise - Anbieter anlegen und bearbeiten (mit „Prüfen“), Zuordnungen, Erweitert (Claim, Scopes) - Passwort-Anmeldung - Anmeldeseite: Knöpfe je Anbieter, Fehlermeldung nach der Rückkehr. Bei „nur Administratoren“ ist das Passwortformular eingeklappt. **Doku:** README, docs/03 (Keycloak Schritt für Schritt), Handbuch Teil F und PDF. **Tests** - API mit Keycloak-Testdouble (eigener RSA-Schlüssel, JWKS, Token, Userinfo): - erster Login mit Gruppen, zweiter Login mit geänderten Rollen, Abmelden beim Anbieter, Protokoll - manipulierte Signatur, falsche Zielgruppe, fremder Browser, unbestätigte E-Mail bei vorhandenem Konto - Domains, kein automatisches Anlegen, Passwort-Anmeldung nur für Administratoren - Secret verschlüsselt, Prüfen, unbekannte Gruppe - E2E (Chromium, WebKit): Einrichtung im Admin-Bereich, Knopf auf der Anmeldeseite, Fehlermeldung. 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_015z57Agxa5kZg6szB3zFN3x
Neu: Anmeldung über Keycloak und andere OpenID-Connect-Anbieter
All checks were successful
check / verify (pull_request) Successful in 11m45s
1ed88fd82a
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015z57Agxa5kZg6szB3zFN3x
thiel merged commit f80f9fd589 into main 2026-10-09 09:05:42 +00:00
thiel deleted branch oidc 2026-10-09 09:05:43 +00:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
thiel/fobu!43
No description provided.