CodamAIDocs
Themafertig

E-Mail bestätigen

CIAS legt das Konto deaktiviert an, verschickt eine eigene Mail mit Einmal-Link und schaltet erst nach dem Klick frei. Wie der Link geschützt ist.

Ausprägungen
Klickzweiter Klick (gleiches Ergebnis)Link unbekannt oder abgelaufen → 404Admin bestätigt manuell

Worum es geht

Bevor jemand ein Konto nutzen darf, muss feststehen, dass ihm die Adresse gehört. Dafür schickt CIAS eine Mail mit einem Link. Wer ihn anklickt, beweist, dass er das Postfach lesen kann.

CIAS macht das selbst, nicht Keycloak. So sind Mail, Link und Ablauf für alle Varianten gleich und in CIAS nachvollziehbar.

Der Ablauf

sequenceDiagram
    participant C as CIAS
    participant K as Keycloak
    participant M as E-Mail
    participant B as Benutzer
    C->>K: Konto anlegen: enabled=false, emailVerified=false
    C->>C: Token erzeugen, nur den Hash speichern
    C->>M: Mail mit Link …/registration/verify?token=…
    M-->>B: Mail
    B->>C: POST /cias/registration/verify { token }
    C->>C: Hash bilden, Vorgang suchen, gültig?
    C->>C: Token verbraucht, Vorgang → VERIFIED
    Note over C: dann Freigabe oder Bereitstellung
    C->>K: emailVerified=true, enabled=true

Eigenschaften des Tokens

EigenschaftWertWarum
Länge32 zufällige Bytes (256 Bit), als 43 Zeichen im Linknicht zu erraten
gespeichertnur der SHA-256-HashWer die Datenbank liest, kann damit keinen Link bauen
gültigso lange, wie der Ablauf festlegt (token-ttl, Standard 24 Stunden)Links in alten Mails sollen nicht ewig funktionieren
NutzungeinmalDanach ist das Token verbraucht
eindeutigjeder Hash gehört zu genau einem Vorgang

Ein Hash ist ein Fingerabdruck: Aus dem Token lässt sich der Hash leicht berechnen, aus dem Hash aber nicht das Token.

Die Varianten

Was beim Einlösen passiert

Wann: Token bekannt, nicht abgelaufen, Vorgang wartet auf den Klick.

Das Token wird als verbraucht markiert, der Vorgang geht nach VERIFIED. Danach geht es ohne weiteres Zutun weiter: zur Freigabe, wenn der Ablauf eine verlangt, sonst direkt in die Bereitstellung.

Ergebnis: 202 { "status": "accepted" }

Wann: Das Token wurde schon eingelöst. Häufig öffnet ein Mailprogramm Links vorab, um sie zu prüfen, und löst das Token damit vor der Person ein.

CIAS erkennt, dass der Vorgang schon weiter ist, und tut nichts. Die Antwort ist dieselbe wie beim ersten Klick.

Ergebnis: 202, keine Änderung.

Wann: Das Token gibt es nicht, oder es ist abgelaufen, während der Vorgang noch auf den Klick wartet.

Beide Fälle bekommen dieselbe Antwort. Wer Links errät, erfährt nichts.

Ergebnis: 404 cias.registration.not-found. Die Person registriert sich neu und bekommt eine neue Mail.

Wann: Die Mail kommt nicht an, und ein Plattform-Administrator hat die Adresse auf anderem Weg geprüft.

  1. 1
    Admin→CIAS
    POST /cias/admin/registrations/{id}/activate
  2. 2
    CIAS
    Wartet der Vorgang auf den Klick?
  3. 3
    CIAS
    markiert das Token als verbraucht, auch wenn es abgelaufen ist, Vorgang → VERIFIED
  4. 4
    CIAS
    weiter wie nach einem Klick

Ergebnis: Nur für Plattform-Administratoren.

Weiter

Quellen im Code und in der Wissensdatenbank
  • CIAS/cias-registration – TokenFactory, RegistrationToken, Registration (verify, confirmManually), RegistrationService (register, verify, activate), RegistrationLinks
  • CIAS/cias-iam-keycloak – KeycloakIdentityAdapter (createDisabledIdentity, markEmailVerified, enable)
  • CIAS/cias-registration – RegistrationServiceTest (zweiter Klick), RegistrationEntity (token_hash)
  • CIAS/cias-registration/docs/adr – ADR-012
Suchen