Files
nexarch/docs/IAM-16-PRUEFPROTOKOLL.md
T
sysops 3b3991f54f IAM-16: login-account-dienst-starten
- cmd/account-api: tenant-gescopter Login/Account-Dienst, setzt die
  fertigen IAM-08-Handler zusammen (auth, authtoken, totp) - Login ueber
  totp.Handler.Login (deckt 2FA optional mit ab), Passwort-Reset ueber
  authtoken.LogNotifier (IAM-08s eigene Uebergangsloesung)
- reines Wiring, kein Diff an internal/auth|authtoken|totp|user
  (verifiziert)
- real deployed auf 131, end-zu-ende per curl: falsches Passwort->401,
  korrektes Passwort->echte Session-Cookie, geschuetzter Endpunkt mit
  Cookie->200 (echte Nutzerdaten), ohne Cookie->401
- Migrationen (users/totp/password_tokens) real auf tenant_acme
  angewendet, reale Grant-Luecke behoben und verifiziert
- RBAC-05s Board-dependsOn um IAM-16 ergaenzt (RBAC-05 braucht dieselbe
  Auth-Middleware, bei Sichtpruefung festgestellt)

Pruefungen siehe docs/IAM-16-PRUEFPROTOKOLL.md
2026-08-30 21:18:57 +02:00

79 lines
4.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# IAM-16 Prüfprotokoll: Login/Account-Dienst starten (IAM-08 als laufender Dienst)
Voraussetzung IAM-08 bereits Fertig, hier UNVERÄNDERT.
## Bedeutung über IAM-08 hinaus
IAM-16 ist nicht nur die Voraussetzung für die IAM-08-eigenen Prüfungen,
sondern die grundlegende Session-/Auth-Infrastruktur für JEDE
Auth-geschützte Core-GUI (`auth.RequireAuth`/`auth.ClaimsFromContext`).
Bei der RBAC-05-Sichtprüfung wurde festgestellt, dass
`internal/rbac.Handler.ListRoles` genau diese Middleware voraussetzt —
RBAC-05s Board-`dependsOn` wurde entsprechend um IAM-16 ergänzt.
## Reines Wiring, keine neue Logik
`git diff --stat internal/auth/ internal/authtoken/ internal/totp/ internal/user/`
liefert KEINEN Diff gegenüber dem IAM-08-Stand. `cmd/account-api/main.go`
setzt ausschließlich bestehende Konstruktoren zusammen (u. a.
`totp.Handler.Login` als DER EINE Login-Endpunkt, der optional 2FA
mitprüft — bereits so von IAM-08 dokumentiert). Passwort-Reset nutzt
`authtoken.LogNotifier{}` — ebenfalls bereits von IAM-08 als
Übergangslösung bereitgestellt (Versand über CFG-02/CFG-05 ist explizit
ein späterer Austausch, kein IAM-16-Thema).
## Umsetzung
- `cmd/account-api/main.go` tenant-gescopter (Modell C) Login/Account-
Dienst: `POST /auth/login` (2FA-fähig), `POST /auth/logout`,
`POST /auth/password-reset/{request,complete}`, `GET /account/me`,
`POST /account/change-password`, `GET/POST /auth/totp/*` (Status/
Setup) — letztere drei hinter `auth.RequireAuth`.
- `deploy/systemd/nexarch-account-api.service.tmpl`.
## Prüfungen
| # | Prüfung | Ergebnis |
|---|---|---|
| 1 | Dienst startet und bleibt stabil (systemctl status aktiv) | **bestanden** real auf 131: `nexarch-account-api.service` aktiv, `Restart=on-failure` |
| 2 | Realer Login-Versuch (korrektes Passwort) liefert eine gültige Session, falsches Passwort wird abgelehnt | **bestanden** real per `curl`: falsches Passwort → 401 (`invalid_credentials`); korrektes Passwort → 200 mit echtem, signiertem `nexarch_session`-JWT-Cookie (`HttpOnly`, `Secure`, `SameSite=Strict`); anschließend `GET /account/me` MIT Cookie → 200 mit den echten Nutzerdaten, OHNE Cookie → 401 |
| 3 | Code-Review: keine Änderung an internal/auth/, internal/authtoken/, internal/totp/ selbst, nur main.go+systemd neu | **bestanden** `git diff --stat` bestätigt: alle vier Pakete unverändert gegenüber IAM-08 |
## Echte Verdrahtung auf 192.168.1.131
- `account-api` gebaut nach `/opt/nexarch-core/bin/`,
`/etc/nexarch/account-api.env` (0600), `nexarch-account-api.service`
installiert/aktiviert.
- Migrationen `0001_users`, `0002_users_password`, `0003_totp`,
`0003_password_tokens` real auf `tenant_acme` angewendet (fehlten
bisher dort) — `nexarch_core` hatte zusätzlich keine
CREATE-Berechtigung auf `tenant_acme`, Migrationen daher als
`postgres` ausgeführt (Betriebs-Erkenntnis, kein IAM-16-Defekt: DDL
läuft grundsätzlich privilegiert, DML über die Anwendungsrolle).
- Reale Grant-Lücke gefunden und behoben (gleiches Muster wie zuvor):
`nexarch_core` hatte keine Rechte auf `users`, `totp_credentials`,
`totp_recovery_codes`, `totp_policy`, `password_tokens``GRANT`
nachgezogen und über `information_schema.role_table_grants`
verifiziert.
- End-zu-Ende-Beweis: echter Testnutzer angelegt (`bcrypt`-Hash über
`auth.HashPassword`), Login-Fehlversuch und -Erfolg, geschützter
Endpunkt mit/ohne Cookie — alle Testdaten anschließend entfernt.
## Build/Test-Ergebnis (192.168.1.131)
```
go build ./... -> clean
go vet ./... -> clean
golangci-lint run ./cmd/account-api/... -> 0 issues
```
Keine neuen Go-Tests nötig (kein neuer Fachcode außer main.go, die
eigentliche Logik ist bereits durch IAM-08s eigene Tests abgedeckt).
## Gesamtergebnis
**Bestanden.** IAM-08 ist jetzt ein real laufender, über systemd
verwalteter Dienst — Voraussetzung für RBAC-05 und jede weitere
Auth-geschützte Core-GUI. Board-`dependsOn` von RBAC-05 wurde vor
dieser Umsetzung entsprechend korrigiert.