From e2ad8ab03ec4559db436489647a6e4d2f35959a1 Mon Sep 17 00:00:00 2001 From: Sascha Wolf Date: Wed, 23 Sep 2026 22:05:24 +0200 Subject: [PATCH] feat(auth): Sitzungen laufen standardmaessig 7 Tage JWT_EXPIRES_IN faellt ohne Eintrag in .env jetzt auf 7d statt 12h zurueck. Doku und .env.example angepasst. Co-Authored-By: Claude Opus 5.5 --- docs/01-architektur.md | 2 +- docs/06-betrieb.md | 2 +- docs/07-anleitung-benutzer.md | 2 +- docs/09-quellcode.md | 2 +- docs/13-anmeldung-sso.md | 2 +- server/.env.example | 2 +- server/src/middleware/auth.js | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/docs/01-architektur.md b/docs/01-architektur.md index 28014fd..84cc029 100644 --- a/docs/01-architektur.md +++ b/docs/01-architektur.md @@ -69,7 +69,7 @@ sequenceDiagram E->>M: SELECT crm_users WHERE username M-->>E: Zeile mit bcrypt-Hash E->>E: bcrypt.compare - E-->>B: { token (JWT, 12 h), user } + E-->>B: { token (JWT, 7 Tage), user } Note over B: Token im localStorage B->>A: GET /api/scanner/matches
Authorization: Bearer ... diff --git a/docs/06-betrieb.md b/docs/06-betrieb.md index 5b2d74f..37926ed 100644 --- a/docs/06-betrieb.md +++ b/docs/06-betrieb.md @@ -51,7 +51,7 @@ mitten im Scrapen beenden. | --- | --- | | `PORT`, `HOST` | `5006`, `127.0.0.1` - von außen nur über Apache | | `DB_*` | Verbindung zu `perinco_CRM` | -| `JWT_SECRET`, `JWT_EXPIRES_IN` | Signatur der Sitzungen, Standard 12 h | +| `JWT_SECRET`, `JWT_EXPIRES_IN` | Signatur der Sitzungen, Standard 7 Tage (`7d`) | | `ADMIN_*` | wird beim ersten Start angelegt, nur wenn `crm_users` leer ist | | `SCANNER_DB_NAME` | eigene Scanner-Datenbank, Standard `perinco_scanner` | | `SCANNER_ENCRYPTION_KEY` | AES-Schlüssel für Portal-Passwörter | diff --git a/docs/07-anleitung-benutzer.md b/docs/07-anleitung-benutzer.md index d08da13..49ba15c 100644 --- a/docs/07-anleitung-benutzer.md +++ b/docs/07-anleitung-benutzer.md @@ -1025,7 +1025,7 @@ nicht zum Benutzerkonto. | Beobachtung | Ursache und Abhilfe | | --- | --- | -| „Sitzung abgelaufen" | 12 Stunden vorbei, neu anmelden | +| „Sitzung abgelaufen" | 7 Tage seit der Anmeldung vorbei, neu anmelden | | Trefferliste ist leer | *Anzeige ab %* zu hoch oder *Zeitraum* zu kurz | | Kein Ton bei Treffern | Dashboard offen? Einmal auf der Seite geklickt? Wert *Hinweis ab %* erreicht? | | Mikrofon-Knopf fehlt | kein Mikrofon oder keine HTTPS-Verbindung | diff --git a/docs/09-quellcode.md b/docs/09-quellcode.md index 6ab699e..eaec804 100644 --- a/docs/09-quellcode.md +++ b/docs/09-quellcode.md @@ -65,7 +65,7 @@ im Quelltext steht kein Passwort. | Export | Zweck | | --- | --- | -| `signToken(user)` | JWT mit `sub` und `role`, Laufzeit aus `JWT_EXPIRES_IN` (12 h) | +| `signToken(user)` | JWT mit `sub` und `role`, Laufzeit aus `JWT_EXPIRES_IN` (7 Tage) | | `requireAuth` | Token prüfen **und** Benutzer frisch aus der DB laden | | `requireAdmin` | 403, wenn `req.user.role !== 'admin'` | diff --git a/docs/13-anmeldung-sso.md b/docs/13-anmeldung-sso.md index cc84a5b..4fdc8d2 100644 --- a/docs/13-anmeldung-sso.md +++ b/docs/13-anmeldung-sso.md @@ -13,7 +13,7 @@ daneben bestehen. | App-Registrierung | dieselbe wie die [Postfachanbindung](11-postfach.md) - kein zweites Secret | | Neue Konten | **werden nicht angelegt**; es braucht ein bestehendes Konto in der Nutzerverwaltung | | Passwortanmeldung | bleibt für alle bestehen (Notzugang, falls Entra ausfällt) | -| Sitzung | wie bisher ein CRM-JWT aus `signToken()`, Standard 12 h | +| Sitzung | wie bisher ein CRM-JWT aus `signToken()`, Standard 7 Tage | ## Ablauf diff --git a/server/.env.example b/server/.env.example index 339a85d..a98603d 100644 --- a/server/.env.example +++ b/server/.env.example @@ -14,7 +14,7 @@ DB_NAME=perinco_CRM # Signiert die JWT-Sessions. Muss ein langer Zufallswert sein. JWT_SECRET=changeme-langer-zufallswert -JWT_EXPIRES_IN=12h +JWT_EXPIRES_IN=7d # Wird beim ersten Start angelegt, falls noch kein Benutzer existiert. ADMIN_USERNAME=admin diff --git a/server/src/middleware/auth.js b/server/src/middleware/auth.js index 99f2353..9e1cc6d 100644 --- a/server/src/middleware/auth.js +++ b/server/src/middleware/auth.js @@ -11,7 +11,7 @@ function secret() { export function signToken(user) { return jwt.sign({ sub: user.id, role: user.role }, secret(), { - expiresIn: process.env.JWT_EXPIRES_IN || '12h', + expiresIn: process.env.JWT_EXPIRES_IN || '7d', }); }