CodamAIDocs
Themafertig

CIAS als Brücke zum Identity Provider

Was CIAS tut und was ausdrücklich nicht: kein Login, keine Passwörter, keine Prüfung von Rechten auf Daten. Mit der Tabelle „CIAS tut / CIAS tut nicht“.

Ausprägungen
Was Keycloak machtWas CIAS machtWas die Anwendung machtSchreibrichtung Anwendung → CIAS → KeycloakLeserichtung: Keycloak führt bei Konteneingebettet / getrennt

Worum es geht

Zwischen einer CodamAI-Anwendung (zum Beispiel CDMS) und dem Identity Provider steht CIAS. Ein Identity Provider, kurz IdP, ist das System, bei dem sich Menschen anmelden. Bei CodamAI ist das heute Keycloak.

CIAS ist dabei eine Brücke. Auf der einen Seite stehen die Anwendungen mit ihren Rollen und Attributen, auf der anderen Seite steht der IdP mit Konten, Passwörtern und Tokens. CIAS verbindet beide Seiten und gibt der Anmeldung eine fachliche Bedeutung: wer die Person ist, zu welchem Mandanten sie gehört und welche Rechte sie trägt.

Warum eine Brücke und nicht einfach Keycloak direkt? Weil der IdP austauschbar bleiben soll. Heute steht dort Keycloak, morgen vielleicht ein anderes Produkt. Keine Anwendung und kein Fachmodul von CIAS kennt Keycloak. Nur ein einziger Baustein spricht mit Keycloak, der Adapter.

Wer macht was?

Drei Beteiligte, drei Aufgaben
Keycloak
Identity Provider
  • zeigt die Login-Seite
  • prüft Passwort und MFA
  • hält die Sitzung
  • stellt Tokens aus und signiert sie
  • speichert Konten und ihre Profilattribute
CIAS
Bedeutung und Verwaltung
  • führt Benutzer, Mandanten, Rollen, Gruppen, Attribute als eigene Datensätze
  • Registrierung, Einladung, Sperren, Schließen
  • schreibt Rollen, Gruppen und Attribute in Keycloak
  • prüft bei jeder Anfrage Token und Mandant
  • entscheidet, wer ein Recht vergeben darf
Die Anwendung (z. B. CDMS)
Durchsetzung
  • liest die Rollen aus dem Token
  • entscheidet, was eine Rolle auf den Daten erlaubt
  • filtert Zeilen nach Attributen
  • meldet ihre Rollen und Attribute bei CIAS an

MFA heißt Multi-Faktor-Authentifizierung, also ein zweiter Nachweis neben dem Passwort, etwa ein Code aus einer App. Ein Token ist ein signierter Ausweis, den Keycloak nach der Anmeldung ausstellt. Die Anwendung schickt ihn bei jeder Anfrage mit.

CIAS tut, CIAS tut nicht

CIAS tutCIAS tut nicht
Benutzer anlegen, sperren, schließen, einladen, registriereneine Login-Seite zeigen oder ein Passwort prüfen
die E-Mail bestätigen lassen und Mails verschickenPasswörter, MFA-Geheimnisse oder Sitzungen speichern
Mandanten anlegen und ihren Zustand führenTokens ausstellen
Rollen katalogisieren, vergeben, befristen, entziehenentscheiden, ob die Rolle hr-employee-read das Modell employee lesen darf
Gruppen als Rollenbündel führenZeilen filtern oder Daten ausliefern
Attribute anmelden und ihre Werte schreibenRechte an Keycloak vorbei vergeben lassen
bei jeder Anfrage das Token prüfen und den Mandanten zulassenRollen erfinden, die kein Modul angemeldet hat

Die rechte Spalte ist keine Lücke, sondern Absicht. Die Frage, ob eine Funktion zu CIAS gehört, beantwortet eine einzige Linie: Fachliche Bedeutung liegt bei CIAS, technische Anmeldung beim IdP, die Durchsetzung auf den Daten bei der Anwendung.

Die Schreibrichtung

Rechte fließen immer in eine Richtung:

flowchart LR
    A["Anwendung<br/>(CDMS, CRMS, …)"] -- "meldet Rollen<br/>und Attribute an" --> C["CIAS<br/>Katalog, Vergaben,<br/>Gruppen, Werte"]
    C -- "schreibt über<br/>den Adapter" --> K["Keycloak<br/>Rollen, Gruppen,<br/>Profil, Mapper"]
    K -- "stellt Token aus" --> T(["Token"])
    T -- "bei jeder Anfrage" --> A
  1. Die Anwendung meldet an, welche Rollen und Attribute sie kennt. Sie schreibt nichts selbst in Keycloak.
  2. CIAS nimmt die Anmeldung in seinen Katalog auf, führt alle Vergaben und schreibt sie über den Adapter nach Keycloak.
  3. Keycloak packt die Rollen und Attribute beim Anmelden ins Token.
  4. Die Anwendung liest das Token und setzt die Rechte durch.

Die Leserichtung bei Konten

Bei den Konten selbst ist es umgekehrt. Ob ein Konto existiert und ob es aktiv ist, weiß Keycloak am besten. Dort melden sich die Menschen an, dort kann auch ein Betreiber ein Konto in der Konsole anlegen. CIAS gleicht sich daran an und kann bestehende Konten übernehmen, siehe Bestehende Konten übernehmen.

Den umgekehrten Weg gibt es genau einmal: Eine Registrierung erzeugt ein neues Konto. CIAS legt es dann selbst in Keycloak an.

Wer hat bei welcher Frage recht?
FrageFührend ist
Stimmt das Passwort? Ist die Sitzung gültig?Keycloak
Gibt es das Konto, ist es aktiviert?Keycloak. CIAS gleicht sich an
Welche Mandanten gibt es, sind sie aktiv?CIAS
Welche Rollen gibt es, wer darf sie vergeben, wer hat sie bekommen?CIAS. Keycloak hält eine Kopie
Welche Gruppen gibt es, wer ist Mitglied?CIAS. Keycloak hält eine Kopie
Darf diese Rolle dieses Modell lesen?die Anwendung, etwa CDMS

Wie die Brücke gebaut ist

Innen besteht CIAS aus Fachmodulen (Registrierung, Benutzer, Rollen und Gruppen, Mandanten, Benachrichtigungen, Audit). Keines davon spricht direkt mit Keycloak. Jedes nutzt einen Port: eine Schnittstelle, die nur sagt, was gebraucht wird, etwa „lege ein Konto an“ oder „vergib diese Rolle“. Das Wie steckt im Adapter.

flowchart LR
    subgraph CIAS
      F["Fachmodule<br/>Registrierung, Benutzer,<br/>Rollen, Mandanten …"] --> P["Ports<br/>was gebraucht wird"]
    end
    P --> KA["Keycloak-Adapter"]
    P --> MA["Speicher-Adapter<br/>für Tests"]
    KA --> K["Keycloak"]

Wer den IdP wechselt, schreibt einen neuen Adapter. Die Fachmodule bleiben, wie sie sind. Details unter Ports und Adapter.

Eingebettet oder getrennt

CIAS läuft in zwei Betriebsarten. Fachlich verhält es sich in beiden gleich.

eingebettet
eine Einheit mit der Anwendung
  • CIAS ist ein Baustein im selben Programm wie CDMS
  • kein eigener Dienst nötig
  • Aufrufe zwischen CDMS und CIAS sind Methodenaufrufe
getrennt
eigener Service
  • CIAS läuft als eigener Dienst mit eigener Datenbank
  • CDMS fragt CIAS über HTTP

Mehr dazu unter Eingebettet und Getrennt.

Weiter

Quellen im Code und in der Wissensdatenbank
  • CIAS/CLAUDE.md – §1.1 Leitlinie, §6 Betriebsmodelle, §13 IAM-Abstraktion, §21 Source of Truth, §22 Synchronisation
  • CIAS/cias-iam-api – Ports (IdentityProvisioningPort, RoleManagementPort, GroupManagementPort, OrganizationManagementPort …)
  • CIAS/cias-iam-keycloak, CIAS/cias-iam-memory – Adapter
  • CIAS/cias-authentication – JwtSessionFilter, TokenParser, EffectiveRoles
  • CIAS/cias-authorization/docs/adr – ADR-023, ADR-025, ADR-043
Suchen