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
Wann: Sperren oder Schließen
-
1CIAS→Keycloakdeaktiviert das Konto
-
2CIASspeichert den neuen Statusscheitert: 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
-
1CIASspeichert
ACTIVE -
2CIAS→Keycloakaktiviert das Kontoscheitert: 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
| Vorgang | Reihenfolge | Bleibt bei einem Fehler dazwischen |
|---|---|---|
| sperren, schließen | Keycloak, dann CIAS | Konto deaktiviert, Datensatz noch alt |
| reaktivieren, aktivieren | CIAS, dann Keycloak | Datensatz ACTIVE, Konto noch deaktiviert |
| umbenennen, umziehen, CIAS-Attribute | nur 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.