feat: TOTP-Geheimnis auslesen, um ein zweites Geraet einzurichten

Die Anwendung zeigt das Geheimnis genau einmal an, beim Einrichten - das
ist richtig so. Wer den Zugang aber auf ein zweites Geraet legen will,
Handy und Tablet oder ein Ersatzgeraet im Schrank, braucht es noch
einmal. Bisher blieb dafuer nur, den zweiten Faktor zurueckzusetzen und
alle Wiederherstellungscodes neu zu erzeugen.

Das Skript laeuft nur auf dem Server und nur mit Zugriff auf die
Datenbank UND auf ENC_KEY_V1. Wer beides hat, kann ohnehin alles lesen -
genau deshalb liegt der Schluessel nicht in der Datenbank. Es ist also
keine Hintertuer, sondern erspart eine unnoetige Neueinrichtung.

Es gibt den otpauth-URI mit aus, aber mit dem ausdruecklichen Hinweis,
ihn in einen QR-Erzeuger auf demselben Rechner zu geben und nicht in
einen Dienst im Netz - sonst haette man das Geheimnis gerade dorthin
gegeben, wovor der zweite Faktor schuetzen soll.

Geprueft gegen den Entwicklungszugang: der ausgelesene Wert stimmt mit
SEED_DEV_TOTP_SECRET ueberein.

Etappe: 8
Phase: Haertung
This commit is contained in:
Florian Wilde
2026-08-22 11:44:29 +02:00
parent 7633603a2a
commit 9df6419a68
2 changed files with 135 additions and 0 deletions
+13
View File
@@ -347,6 +347,19 @@ abends musst du nichts nacharbeiten.
## Wenn etwas schiefgeht
**Ich will den Zugang auf ein zweites Gerät legen.**
Das Geheimnis wird nur einmal angezeigt, beim Einrichten. Wer es später
noch einmal braucht — Handy und Tablet, oder ein Ersatzgerät im Schrank —
liest es auf dem Server aus:
```bash
docker compose exec app node scripts/totp-geheimnis.mjs deine@adresse.de
```
Das ist keine Hintertür: Es läuft nur mit Zugriff auf die Datenbank **und**
auf `ENC_KEY_V1`. Wer beides hat, kommt ohnehin an alles. Die Ausgabe
gehört trotzdem in kein Protokoll und in keine E-Mail.
**Ich habe mein Handy mit der Authenticator-App verloren.**
Melde dich mit einem deiner Wiederherstellungscodes an — statt der sechs
Ziffern gibst du den Code im Format `XXXX-XXXX-XXXX` ein. Jeder