Worum es geht
Über die Verwaltung von CIAS legt man Konten an, vergibt Rollen und eröffnet Mandanten. Das sind die heikelsten Daten der Plattform. Ob jemand dafür einen zweiten Faktor braucht oder sich gerade eben angemeldet haben muss, kann CIAS nicht für jede Installation wissen. Deshalb stellt es die Installation ein: für jeden Bereich der Verwaltung, getrennt nach Lesen und Ändern.
Jede Einstellung ist eine Anforderung aus Anmeldestufe und, wenn gewünscht, Höchstalter. Was das ist und wie die Antwort aussieht, wenn die Anmeldung nicht reicht, steht unter Anmeldestufe und Step-up.
Fünf Bereiche, zweimal
| Bereich | Was dazu gehört |
|---|---|
users | Konten, ihre Attribute, der Umzug in einen anderen Mandanten, der Import |
groups | Gruppen, ihre Mitglieder, der Import und der Abgleich der Gruppen |
roles | der Katalog der angemeldeten Rollen und Attribute, Vergaben und Entzüge, der Rollenabgleich |
tenants | Mandanten und ihr Lebenslauf: anlegen, sperren, entsperren, schließen |
registrations | Registrierungen freigeben, ablehnen, wiederholen und verwerfen, jemanden als Administrator registrieren, die Regeln für Startrollen |
Je Bereich gibt es zwei Zugriffe:
read(Lesen): Listen, Suchen und das Lesen eines einzelnen Eintrags.write(Ändern): alles, was etwas verändert, auch das Anstoßen eines Abgleichs.
Das macht zehn Anforderungen.
Die Einstellungen
codamai.cias.administration.<bereich>.<zugriff>.level basic | mfa | phishing-resistant
codamai.cias.administration.<bereich>.<zugriff>.max-age ganze Sekunden oder ISO-8601
CIAS_ADMINISTRATION_<BEREICH>_<ZUGRIFF>_LEVEL dasselbe als Umgebungsvariable
CIAS_ADMINISTRATION_<BEREICH>_<ZUGRIFF>_MAX_AGE
CIAS sieht zuerst in der Einstellung nach und dann in der Umgebungsvariable. ISO-8601 ist ein Format für Zeitdauern, etwa PT5M für fünf Minuten. Auch dann muss es ganze Sekunden ergeben, mindestens eine.
Ein Beispiel: Rollen vergeben soll nur, wer sich in den letzten fünf Minuten mit zweitem Faktor angemeldet hat. Lesen darf jede angemeldete Person mit dem Recht dazu.
codamai:
cias:
administration:
roles:
write:
level: mfa
max-age: 300
Dasselbe als Umgebungsvariablen:
CIAS_ADMINISTRATION_ROLES_WRITE_LEVEL=mfa
CIAS_ADMINISTRATION_ROLES_WRITE_MAX_AGE=300
Der Standard ist neutral: Fehlt eine Angabe, gilt basic ohne Höchstalter. Das erfüllt jede angemeldete Person. Ohne Einstellungen ändert sich also nichts. Eine Installation verschärft, CIAS selbst verlangt nichts.
Ein Wert, den CIAS nicht lesen kann
Steht in einer Einstellung etwas, das CIAS nicht versteht, startet die Anwendung nicht. Die Meldung nennt die Einstellung. Das ist ein Fehler der Installation, und mit einer anderen Anforderung zu laufen als der, die dasteht, wäre die stille Art von Fehler. Siehe Im Zweifel ablehnen.
| Wert | Folge |
|---|---|
level: mfa, max-age: 300 oder PT5M | gilt |
level: high (keine bekannte Stufe) | Start verweigert |
max-age: 0 | Start verweigert, mindestens eine Sekunde |
max-age: PT0.5S | Start verweigert, nur ganze Sekunden |
max-age: fünf Minuten | Start verweigert, weder Zahl noch ISO-8601 |
Was bei einer Verwaltungsanfrage passiert
| Recht vorhanden? | Service-Account? | Anmeldung erfüllt die Anforderung? | Antwort |
|---|---|---|---|
| nein | – | – | 403 der Verwaltung, wie immer |
| ja | ja | – | die Anfrage läuft. Service-Accounts sind ausgenommen |
| ja | nein | nein | 401 cias.authentication.step-up-required|<stufe>[|<sekunden>] mit Kopf nach RFC 9470 |
| ja | nein | ja | die Anfrage läuft |
Zuerst das Recht. Wer etwas gar nicht darf, bekommt die gewohnte 403. Ihn erst zu einer stärkeren Anmeldung zu schicken, die ihn danach doch nicht hineinlässt, wäre sinnlos.
Service-Accounts sind ausgenommen. Ein Service-Account kann sich nicht neu anmelden und hat keine Anmeldezeit. Jede Anforderung über basic oder mit Höchstalter sperrte ihn für immer aus. Ihn schützen sein Geheimnis und seine Rollen. CIAS erkennt ihn an azp und preferred_username in der Form service-account-<client>, siehe Service-Accounts.
CIAS meldet seine Stufen an
CIAS ist selbst ein Modul und meldet in seiner Deklaration die Stufen an, die seine Einstellungen nennen. Verlangt etwa roles.write die Stufe mfa, steht mfa in der Liste.
So prüft der Abgleich, ob der Anmeldeablauf in Keycloak diese Stufe erreicht. Fehlt der Schritt dafür, meldet der Bericht es mit cias als Modul. Ohne diesen Schritt käme niemand mehr in diesen Teil der Verwaltung.
Was nicht abgedeckt ist
Die Anforderungen gelten nur, wenn eine Person die Verwaltung bedient. Nicht abgedeckt sind:
- die Selbstauskunft: was eine Person über sich selbst liest oder ändert, siehe Selbstauskunft
- die Endpunkte zum Nachschlagen zwischen Diensten, etwa für das Mandanten-Tor oder die Attributwerte je Mandant
- die Läufe beim Start, etwa der erste Rollenabgleich
- die Hooks einer Registrierung im selben Prozess und ein Registrierungsablauf, den eigener Code ohne angemeldeten Aufrufer startet
Dort handelt kein Administrator, oder es gibt keine Person, die man fragen könnte.
Eingestellt beim Zusammenbau im Hub
Im Hub stellst du die zehn Anforderungen am CIAS-Modul eines Projekts ein, im CIAS-Portal im Bereich Verwaltung.
-
1Entwickler→Hubwählt im Bereich Verwaltung je Bereich für Lesen und Ändern eine Stufe und gegebenenfalls ein Höchstalter in SekundenLeer heißt: jede Anmeldung, beliebig alt. Ein Höchstalter ohne Stufe verlangt eine frische einfache Anmeldung.
-
2Hubprüft die EingabenEin Höchstalter unter einer Sekunde oder keine ganze Zahl ist ein Fehler. Ein Hinweis erscheint, wenn der zugehörige Teil von CIAS ausgeschaltet ist oder eine Stufe über
basicverlangt wird: Dann muss der Anmeldeablauf in Keycloak diese Stufe erreichen. -
3Generatorschreibt jeden gesetzten Wert als Standard seiner Umgebungsvariable in die
cias-configuration.yamldes SystemsErgebnis: etwalevel: ${CIAS_ADMINISTRATION_ROLES_WRITE_LEVEL:mfa}undmax-age: ${CIAS_ADMINISTRATION_ROLES_WRITE_MAX_AGE:300}
Die Werte wirken mit dem nächsten Build. Eine Umgebung kann jeden über seine Umgebungsvariable überschreiben. Was leer bleibt, schreibt der Generator gar nicht, und es gilt der neutrale Standard.
Das gebaute System hat danach keine Verbindung zum Hub. Es liest die Werte beim Start aus seiner Konfiguration.

Keine Änderung zur Laufzeit
Es gibt keinen Endpunkt und keinen anderen Weg, eine Anforderung im laufenden System zu ändern. Das ist Absicht: Wer eine Anforderung senken könnte, könnte den Step-up abschalten, und zwar genau für die Daten, die er schützen soll. Eine Änderung geht nur über den Hub mit neuem Build oder über die Umgebungsvariable mit neuem Start.