5.2 KiB
| title | version | status | date | product_family | document_role | parent_document |
|---|---|---|---|---|---|---|
| Kanshō – Auth, Identität und Rollen | 0.1 | Arbeitsstand | 2026-08-19 | Jinkendo | Technical Chapter / Auth / Identity / Roles | technische_zielarchitektur.md |
Kanshō – Auth, Identität und Rollen
Kanonisches Home für Login, Session, Rollen und API-Gates. Fachliche Admin-/Developer-View: ../functional/fachliche_zielarchitektur.md §2.7. Privacy-Identität: ../functional/guardrails.md.
Mitai-Referenz: C:\dev\mitai\.claude\docs\jinkendo-foundation\design-principles\AUTH_SESSION_DESIGN_PRINCIPLES.md, backend/auth.py, frontend/src/context/AuthContext.jsx.
1. Fachliche Verantwortung
Das Auth-Modul übernimmt:
- Identität (Profil + Passwort).
- Session (opaques Token in der Datenbank, Ablauf, Logout).
- API-Gates (
require_auth,require_admin). - Passwort-Lifecycle (Hash, Verify, Reset, Registrierung, E-Mail-Verifizierung).
- Grobe Rollen:
user|admin.
Es übernimmt nicht:
- Feature-Tiers / Entitlements (eigene Schicht,
platform_extensibility.md§6). - Org-/Vereinsmandanten.
- OAuth/SSO/JWT (Familien-Vision, nicht Rahmen).
- Privacy-Pseudonymisierung (→
privacy_gateway.md). - fachliche Autorisierung auf Reflexionsinhalten jenseits von
profile_id.
Spätere feinere Rollen oder ein Abo ersetzen diese Schicht nicht. Sie hängen additiv daran: Session bleibt die Identität, require_admin bleibt der grobe Gate, Entitlements bleiben check_feature_access. Keine Feature-Limits in role und keine Rolle in tier_id mischen.
2. Account-Modell
Status: entschieden
Ein Login (E-Mail) entspricht einem Profil. Kanshō ist keine Multi-Profil-App auf einem Login und keine Vereinsapp.
Mehrere Nutzer pro Instanz: ja. Jede Session ist an genau ein profile_id gebunden. Alle personenbezogenen Tabellen tragen diese Bindung.
Klarnamen, E-Mail und Mapping-Tabellen sind Klasse A (Local Only). Sie verlassen die Trusted Zone nicht als Teil eines External Model Context.
3. Session-Flow (übernommen)
Herkunft: Mitai-Implementierung, als Muster.
- Login mit E-Mail + Passwort, Rate Limit am Login-Endpoint.
- Passwortprüfung via bcrypt.
- Session-Token (
secrets.token_urlsafe), Speicherung insessionsmitexpires_at. - Frontend speichert Token lokal und sendet ihn bei API-Calls (Header-Muster Mitai:
X-Auth-Token). require_authlädt Session + Profil oder antwortet 401.- Logout invalidiert die Session serverseitig.
Session-Dauer: Mitai-Default 30 Tage, profilbezogen konfigurierbar. Für Kanshō bevorzugte Richtung, konkreter Default später festzulegen.
Registrierung und E-Mail-Verifizierung: Mitai-Muster übernehmen, SMTP-Konfiguration über Server-.env.
4. Rollen
| Rolle | Nutzer-PWA | Admin-/Developer View | Status |
|---|---|---|---|
user |
eigene Reflexionsdaten | nein | entschieden |
admin |
eigenes Nutzerkonto plus Verwaltungs- und Diagnosezugriff | ja | entschieden |
Konkretes feineres Rollenmodell (Hauptadmin vs. Entwickler) ist fachlich offen (produktvision_und_produktidentitaet.md Entscheidungsstand). Technisch v0.1: zwei Rollen wie Mitai. Weitere Rollen nur nach fachlicher Entscheidung.
UI-Guard analog RequireAdmin.jsx. Backend-Guard analog require_admin. Die UI ist kein Ersatz für den API-Guard.
5. Bewusst nicht übernehmen (Mitai-Lücke)
Mitai dokumentiert eine bekannte Schwäche: ein Profile-Header (X-Profile-Id) ohne harte Bindung an die Session ermöglicht IDOR.
Status: verworfen für Kanshō
Regeln:
- Die aktive Identität kommt ausschließlich aus der Session.
- Kein Client-Header darf ein anderes
profile_idwählen. - Jede Query auf personenbezogene Daten filtert mit dem Session-Profil.
- Tests müssen fremden Ressourcenzugriff ablehnen.
Historische Multi-Profil-Endpunkte von Mitai (/profiles als Umschalter) werden nicht nachgebaut.
6. Token-Speicherung im Client
Mitai nutzt localStorage. Das ist für eine First-Party-PWA akzeptabel, aber XSS-sensitiv.
Status: bevorzugte Richtung – gleiches Muster wie Mitai für den Rahmen, mit der Maßgabe, später HttpOnly-Cookie vs. localStorage zu bewerten (security.md).
Keine Secrets, API-Keys oder Identity-Mappings im Frontend-Bundle.
7. Entscheidungsstand
| Thema | Stand | Status |
|---|---|---|
| Server-Sessions | opaque Token in DB | entschieden |
| Rollen | user | admin |
entschieden |
| 1 Login = 1 Profil | ja | entschieden |
| IDOR-Header-Profilwahl | nicht übernehmen | verworfen |
| JWT/SSO | nicht Rahmen | verworfen für v0.1 |
| Session-Länge | ~30 Tage | bevorzugte Richtung |
| Feineres Rollenmodell | später | offen |
| Token-Ablage Client | localStorage wie Mitai | bevorzugte Richtung |
8. Offene Fragen
- First-Run-Setup (erster Admin) exakt wie Mitai
SetupScreen? - Selbst-Registrierung offen oder einladungsgesteuert?
- Gemeinsame Jinkendo-Identität später: Migrationspfad von Sessions zu SSO offenhalten, ohne ihn jetzt zu bauen.
9. Querverweise
- Fachlich:
../functional/guardrails.md§4–5,../functional/fachliche_zielarchitektur.md§2.7 - Technisch:
admin_diagnostics.md,security.md,privacy_gateway.md - Mitai:
AUTH.md,AUTH_SESSION_DESIGN_PRINCIPLES.md