16-2: Locking für Token-Rotation ausrollen
Stand: 2026-03-18
J01-18
16-2 Locking für Token-Rotation ausrollen
Inhalts-Schlüssel
Diese Seite
Weitere Seiten
Öffentliche Schritte
- 16-1: Locking für Rate-Limit und CAPTCHA ausrollen
- 16-3: Race-nahe Tests ergänzen
- 16-4: Betriebsnotiz aktualisieren
Schrittspezifischer öffentlicher Arbeitsstand für 16-2 unter J01-16.
Ziel
Den Runtime-Rahmen aus 16-1 auf TokenService.rotate() ausrollen.
Nur der Schreibpfad ist betroffen; Lese-Operationen bleiben unverändert.
Zielbereiche und Lock-Granularität
| Bereich | Zieloperation | Lock-Zuschnitt | Write-Verhalten |
|---|---|---|---|
| Token | rotate(profile, tokens) |
pro profile |
Token-Datei atomar überschreiben unter Lock |
| Token | verify(profile, token) |
kein Lock | nur lesen |
| Token | findProfileForToken(token) |
kein Lock | nur lesen |
rotate() ist ein reiner Schreibvorgang (keine Read-Modify-Write-Folge).
Der Lock schützt gegen zwei gleichzeitige Rotationen desselben Profils.
Der RuntimeAtomicWriter schützt gegen zerrissene Lesezugriffe durch
parallele verify()-Aufrufe.
Überprüfungsplan
| Prüfpunkt | Erwartung | Nachweis / Ort | Status |
|---|---|---|---|
rotate() läuft unter Lock |
Lock-Key token_{profile} pro Profil; gleichzeitige Rotation desselben Profils wird serialisiert |
TokenService::rotateLocked() |
Erledigt |
| Datei wird atomar geschrieben | RuntimeAtomicWriter via temp+rename; Leser sehen nie eine halb geschriebene Token-Datei |
TokenService::rotateLocked() |
Erledigt |
| Lese-Operationen unberührt | verify(), findProfileForToken(), readHashes() ohne Lock, kein Regressions-Risiko |
TokenService.php |
Erledigt |
| Tests grün | 26/26 PHPUnit-Tests nach Änderung | php vendor/bin/phpunit |
Erledigt |
Delta 2026-03-20
Der im App-Repo noch offene Rest zu 16-2 wurde heute explizit
repo-seitig abgeschlossen:
- Commit
8ab08e4ziehtTokenServicesamt letzter Verdrahtung inAppContextauf den in dieser Schrittdoku beschriebenen Stand. php bin/cli config lint devläuft grün.TokenServiceTestund die zugehörigenConcurrencyTest-Fälle laufen mit gesetztemTMPDIRgrün.