CodamAIDocs
Themafertig

Die Schreibreihenfolge

Beim Entziehen zuerst Keycloak, beim Gewähren zuerst CIAS. Warum genau so herum und was bei einem Ausfall dazwischen passiert.

Ausprägungen
Zugang entziehenZugang gewährenAusfall zwischen den Schrittennur in CIAS

Worum es geht

Viele Änderungen an einer Person müssen an zwei Stellen geschrieben werden: im Datensatz von CIAS und im Konto in Keycloak. Beide Schreibvorgänge lassen sich nicht in eine gemeinsame Transaktion packen. Fällt zwischen den beiden etwas aus, steht an einer Stelle das Neue, an der anderen das Alte.

Das lässt sich nicht verhindern, aber man kann bestimmen, welches Halbfertig übrig bleibt. CIAS wählt immer das sichere.

Die zwei Richtungen

sequenceDiagram
    participant A as Admin
    participant C as CIAS
    participant K as Keycloak
    Note over A,K: Zugang entziehen (sperren, schließen)
    A->>C: suspend
    C->>K: 1. Konto deaktivieren
    C->>C: 2. Status SUSPENDED speichern
    C-->>A: 200
    Note over A,K: Zugang gewähren (reaktivieren)
    A->>C: reactivate
    C->>C: 1. Status ACTIVE speichern
    C->>K: 2. Konto aktivieren
    C-->>A: 200

Was bei einem Ausfall übrig bleibt

Ausfall zwischen den Schritten

Wann: Sperren oder Schließen

  1. 1
    CIAS→Keycloak
    deaktiviert das Konto
  2. 2
    CIAS
    speichert den neuen Status
    scheitert: Datensatz zeigt noch den alten Status

Ergebnis: Die Person kann sich nicht mehr anmelden, obwohl der Datensatz noch den alten Status zeigt. Sicher. Den Aufruf wiederholen, dann stimmt auch der Datensatz.

Wann: Reaktivieren

  1. 1
    CIAS
    speichert ACTIVE
  2. 2
    CIAS→Keycloak
    aktiviert das Konto
    scheitert: Konto bleibt deaktiviert

Ergebnis: Der Datensatz sagt ACTIVE, die Person kann sich aber noch nicht anmelden. Sicher. Den Aufruf wiederholen.

Wann: Keycloak antwortet nicht oder mit einem Serverfehler.

CIAS bricht ab und antwortet mit 503 cias.iam.unavailable. Beim Entziehen ist dann noch gar nichts geschrieben, beim Gewähren steht schon der neue Status im Datensatz.

Ergebnis: Später wiederholen.

Wann: Umbenennen, Heimatmandant wechseln, CIAS-Attribute ersetzen

Diese Änderungen betreffen nur den Datensatz in CIAS und schreiben nichts nach Keycloak. Es gibt keine zweite Stelle und damit kein Halbfertig.

Die Tabelle

VorgangReihenfolgeBleibt bei einem Fehler dazwischen
sperren, schließenKeycloak, dann CIASKonto deaktiviert, Datensatz noch alt
reaktivieren, aktivierenCIAS, dann KeycloakDatensatz ACTIVE, Konto noch deaktiviert
umbenennen, umziehen, CIAS-Attributenur CIAS–

Wiederholen ist immer sicher

Jeder dieser Aufrufe lässt sich einfach wiederholen. Ein Konto zu deaktivieren, das schon deaktiviert ist, ändert nichts; eine aktive Person zu aktivieren auch nicht. Deshalb ist die Reparatur nach einem Ausfall immer dieselbe: denselben Aufruf noch einmal.

Einen Hintergrundlauf, der Datensatz und Konto von selbst abgleicht, gibt es für Benutzer nicht. Ein Unterschied fällt beim nächsten Vorgang an dieser Person auf.

Weiter

Quellen im Code und in der Wissensdatenbank
  • CIAS/cias-user – UserService (activate, suspend, close, rename, moveToTenant, replaceAttributes)
  • CIAS/cias-user – UserServiceTest (recordWriteFails, providerUnreachable)
  • CIAS/cias-iam-keycloak – KeycloakAdminApi (Fehlerabbildung)
  • CIAS/cias-user/docs/adr – ADR-017; CIAS/cias-authorization/docs/adr – ADR-034 §5
Suchen