1
0
Files
breadcrumb-the-shire/agent-system/runs/AUTH-MICROSOFT-REMEMBER-001/plan.json

225 lines
12 KiB
JSON
Raw Normal View History

{
"task_id": "AUTH-MICROSOFT-REMEMBER-001",
"summary": "Implementiere steuerbares Auto-Remember fuer erfolgreiche Microsoft-Logins mit globalem Default + Tenant-Override (inherit/force_on/force_off) und fuehre eine globale, konfigurierbare Remember-Token-TTL (in Tagen) fuer alle Remember-Tokens ein. Ziel-Runtime-Kontext: agent-system/runs/AUTH-MICROSOFT-REMEMBER-001/plan.json.",
"assumptions": [
"Bestehendes Default-Verhalten bleibt unveraendert, bis Konfiguration aktiv gesetzt wird (globaler Auto-Remember-Default = aus).",
"Die neue Remember-TTL gilt fuer alle Remember-Tokens (lokaler Login und Microsoft-basierter Remember-Token).",
"Es werden keine API-Endpunkte oder OpenAPI-Vertraege geaendert; Scope ist Web-Auth + Admin-Settings/Tenant-UI + Service/Repository.",
"Microsoft-OIDC-Handshake bleibt unveraendert; erweitert wird nur das Verhalten nach erfolgreichem Login."
],
"scope": {
"in": [
"Globales Settings-Modell fuer Microsoft Auto-Remember Default (bool) und Remember-Token-TTL in Tagen (int) inkl. Validation/Fallbacks.",
"Tenant-spezifischer Microsoft-Override mit drei Zustaenden: inherit, force_on, force_off.",
"Microsoft-Callback-Flow: Remember-Token wird bei erfolgreicher Microsoft-Anmeldung gemaess effektiver Policy gesetzt.",
"RememberMeService-Lifetime auf konfigurierbare TTL umstellen (statt fixer 30 Tage).",
"Admin-Settings-UI und Tenant-SSO-UI um neue Steuerungsfelder erweitern inkl. i18n de/en.",
"Idempotente DB-Updates in db/updates fuer bestehende Installationen sowie Anpassung von db/init/init.sql fuer Fresh-Install.",
"Automatisierte Tests und Quality-Gates fuer neue Logik, Settings-Validierung, Policy-Prioritaet und UI/Contract-Integritaet."
],
"out": [
"Aenderungen an Session Idle/Absolute Timeout-Logik.",
"Aenderungen an OIDC Discovery/Token Exchange/JWT Validierung.",
"Neues API-Interface fuer diese Konfiguration.",
"Aenderungen am bestehenden lokalen Remember-Checkbox-UX im Login-Formular.",
"Breite Refactors ausserhalb Auth/Settings/Tenant-SSO."
]
},
"guardrails": {
"required_guard_ids": [
"GR-CORE-001",
"GR-CORE-003",
"GR-CORE-005",
"GR-CORE-010",
"GR-CORE-011",
"GR-CORE-012",
"GR-SEC-001",
"GR-SEC-002",
"GR-SEC-003",
"GR-UI-009",
"GR-UI-010",
"GR-UI-013",
"GR-UI-015",
"GR-TEST-001",
"GR-TEST-002",
"GR-LANG-002"
],
"required_quality_gate_ids": [
"QG-001",
"QG-002",
"QG-003",
"QG-005",
"QG-006"
]
},
"success_criteria": [
{
"id": "SC-001",
"criterion": "Globale Settings fuer Microsoft Auto-Remember Default und Remember-Token-TTL sind im Settings-Layer implementiert, validiert und mit stabilen Fallbacks verfuegbar (Default: Auto-Remember aus, TTL 30 Tage)."
},
{
"id": "SC-002",
"criterion": "Tenant-Override fuer Microsoft Auto-Remember ist als 3-stufiges Modell (inherit/force_on/force_off) durchgaengig gespeichert, editierbar und im Runtime-Verhalten wirksam."
},
{
"id": "SC-003",
"criterion": "Bei erfolgreicher Microsoft-Anmeldung wird genau dann ein Remember-Token gesetzt, wenn die effektive Policy dies erlaubt; bei force_off oder global aus + inherit wird kein Token gesetzt."
},
{
"id": "SC-004",
"criterion": "RememberMeService nutzt die konfigurierbare TTL fuer Token-Erstellung und Token-Rotation; die feste 30-Tage-Konstante steuert das Verhalten nicht mehr."
},
{
"id": "SC-005",
"criterion": "Admin-Settings- und Tenant-SSO-Formulare enthalten die neuen Felder barrierearm und vollständig lokalisiert (de/en), ohne AuthZ-/CSRF-/PRG-Regression."
},
{
"id": "SC-006",
"criterion": "Neue und angepasste PHPUnit-Tests decken Settings-Validierung, Tenant-Prioritaet und Remember-Policy-Verhalten ab; alle Pflicht-Gates QG-001/002/003/005/006 sind mit Evidenz PASS."
}
],
"implementation_steps": [
{
"id": "S1",
"title": "Datenmodell und Settings-Keys festlegen",
"description": "Fuehre zwei globale Settings-Keys ein: microsoft_auto_remember_default (bool, default 0) und remember_token_lifetime_days (int, default 30). Erweitere tenant_auth_microsoft um ein tri-state-faehiges Feld fuer Tenant-Override (NULL=inherit, 1=force_on, 0=force_off). Erstelle idempotentes SQL-Update in db/updates mit Guards fuer bestehende Installationen und aktualisiere db/init/init.sql fuer Neuinstallationen.",
"guard_refs": [
"GR-CORE-010",
"GR-CORE-011",
"GR-SEC-003"
]
},
{
"id": "S2",
"title": "Settings-Gateway fuer Login-Persistenz implementieren",
"description": "Implementiere einen dedizierten Settings-Gateway fuer Login-Persistenz (bool + TTL inkl. Grenzen, z. B. 1..365 Tage) auf Basis von SettingsMetadataGateway. Binde ihn in SettingServicesFactory ein und expose die Read-Methoden ueber AuthSettingsGateway fuer Auth-Services.",
"guard_refs": [
"GR-CORE-001",
"GR-TEST-002",
"GR-CORE-011"
]
},
{
"id": "S3",
"title": "Tenant-Sso-Service auf Override-Policy erweitern",
"description": "Erweitere TenantMicrosoftAuthRepository Select/Upsert um das neue Override-Feld und normalisiere im TenantSsoService die Eingabe auf inherit/force_on/force_off. Implementiere eine eindeutige Policy-Resolution-Methode shouldAutoRememberOnMicrosoftLogin(tenantId) mit Prioritaet: force_on > force_off > global default bei inherit.",
"guard_refs": [
"GR-CORE-001",
"GR-SEC-003",
"GR-TEST-001",
"GR-TEST-002"
]
},
{
"id": "S4",
"title": "Admin-Settings-Flow erweitern",
"description": "Ergaenze AdminSettingsService buildPageData und updateFromAdmin um die neuen globalen Felder inkl. Validierung, Fehlerkeys und Persistenz. Erweitere pages/admin/settings/index(default).phtml um UI-Felder fuer globalen Microsoft-Auto-Remember-Default und Remember-TTL (nummerisch). Halte CSRF-Pruefung und PRG-Fluss unveraendert.",
"guard_refs": [
"GR-SEC-001",
"GR-CORE-012",
"GR-UI-009",
"GR-UI-010",
"GR-UI-015"
]
},
{
"id": "S5",
"title": "Tenant-SSO-UI und AuthZ-Feldschutz erweitern",
"description": "Ergaenze pages/admin/tenants/_form.phtml um ein 3-stufiges Auswahlfeld fuer Microsoft Auto-Remember Override (inherit/force_on/force_off) innerhalb des SSO-Bereichs. Erweitere create/edit-Flows fuer Formular-Repopulation und erweitere TenantAuthorizationPolicy::containsSsoFields um das neue Feld, damit unberechtigte SSO-Aenderungen weiterhin serverseitig blockiert werden.",
"guard_refs": [
"GR-CORE-005",
"GR-SEC-001",
"GR-UI-009",
"GR-UI-013",
"GR-UI-015"
]
},
{
"id": "S6",
"title": "RememberMeService auf dynamische TTL umstellen",
"description": "Entferne die harte Lifetime-Konstante als verhaltensbestimmende Quelle und nutze statt dessen den neuen Settings-Wert fuer rememberUser() und Token-Rotation in autoLoginFromCookie(). Stelle sicher, dass ungueltige Werte nicht zu unendlichen oder negativen Laufzeiten fuehren (Gateway-validierte Grenzen + Fallback).",
"guard_refs": [
"GR-CORE-001",
"GR-TEST-001",
"GR-TEST-002"
]
},
{
"id": "S7",
"title": "Microsoft-Callback um Policy-gesteuertes Remember erweitern",
"description": "Erweitere pages/auth/microsoft/callback().php nach erfolgreichem loginUserById um policy-gesteuerten Aufruf von rememberUser(userId), basierend auf der effektiven TenantSsoService-Policy. Fehlerpfade, Redirects und bestehendes Session-Timestamp-Verhalten bleiben unveraendert.",
"guard_refs": [
"GR-CORE-003",
"GR-SEC-001",
"GR-CORE-005"
]
},
{
"id": "S8",
"title": "Tests erweitern und Gates absichern",
"description": "Erweitere/erstelle PHPUnit-Tests fuer Settings-Gateway, AdminSettingsService, TenantSsoService, TenantAuthorizationPolicy und RememberMeService mit Fokus auf Defaults, Grenzen, Prioritaetsauflosung und side effects. Fuehre Pflicht-Gates aus und dokumentiere Evidenz pro SC-ID.",
"guard_refs": [
"GR-TEST-001",
"GR-TEST-002",
"GR-LANG-002",
"GR-UI-009"
]
}
],
"tests": [
"Neuer Test: tests/Service/Settings/SettingsLoginPersistenceGatewayTest.php fuer bool+TTL Fallback, Validierungsgrenzen und Persistenz.",
"Erweiterung: tests/Service/Settings/AdminSettingsServiceSessionPolicyTest.php um neue Felder microsoft_auto_remember_default und remember_token_lifetime_days (gueltig/ungueltig).",
"Erweiterung: tests/Service/Auth/TenantSsoServiceTest.php fuer Override-Normalisierung und effektive Policy-Prioritaet (force_on/force_off/inherit+global).",
"Erweiterung: tests/Service/Access/TenantAuthorizationPolicyTest.php um neuen SSO-Feldschutz fuer microsoft_auto_remember_mode.",
"Erweiterung: tests/Service/Auth/RememberMeServiceTest.php fuer dynamische TTL in rememberUser() und Token-Rotation.",
"QG-001: docker compose exec php vendor/bin/phpunit",
"QG-002: docker compose exec php vendor/bin/phpstan analyse -c phpstan.neon --no-progress",
"QG-003: docker compose exec php vendor/bin/phpunit tests/Architecture/CoreStarterkitContractTest.php",
"QG-005: Manueller Browser-Smoke fuer Admin Settings + Tenant SSO + Microsoft Login Callback (keine neuen JS-Fehler, kein A11y-Regressionsverhalten).",
"QG-006: docker compose exec php composer cs:check"
],
"acceptance_checks": [
"SC-001: In Settings-Layer sind microsoft_auto_remember_default und remember_token_lifetime_days mit dokumentierten Defaults/Fallbacks verfuegbar und in buildPageData sichtbar.",
"SC-002: Tenant-Form speichert und laedt den 3-stufigen Override stabil; effective policy entspricht exakt der Prioritaetsregel.",
"SC-003: Microsoft-Callback setzt Remember-Token nur bei effektiver Policy=true und nie in Fehler-/Denied-Pfaden.",
"SC-004: Remember-Tokens erhalten expires_at entsprechend konfigurierter TTL (nicht mehr fest 30 Tage) in Erzeugung und Rotation.",
"SC-005: Neue sichtbare Texte laufen ueber t() und sind in i18n/default_de.json und i18n/default_en.json vorhanden; CSRF/PRG/AuthZ-Verhalten bleibt intakt.",
"SC-006: Alle geplanten Testfaelle laufen stabil und QG-001/002/003/005/006 sind mit PASS dokumentiert."
],
"ux_notes": {
"affected_patterns": [
"Admin settings cards in pages/admin/settings/index(default).phtml",
"Tenant SSO section in pages/admin/tenants/_form.phtml",
"Existing tenant SSO toggle behavior in web/js/components/app-tenant-sso-toggle.js"
],
"ui_states_required": [
"loading",
"empty",
"error",
"success"
],
"a11y_touchpoints": [
"Neue Checkbox/Number-Input in globalen Einstellungen (Labels, Hilfe, Fehleranzeige).",
"Neues tri-state Feld im Tenant-SSO-Formular (semantische Feldbezeichnung und Keyboard-Bedienbarkeit).",
"Fehlerdarstellung via bestehende notice/form-error Muster ohne Fokus-Regression."
]
},
"risks": [
{
"risk": "Falsch konfigurierte TTL kann zu ungewollt langen Persistenzzeiten fuehren.",
"mitigation": "Strikte Validierungsgrenzen im Settings-Gateway (z. B. 1..365), klarer Default 30 und Admin-Validierungsfehler bei ungueltigen Werten."
},
{
"risk": "DB-Migration fuer bestehende Installationen kann fehlschlagen oder nicht idempotent sein.",
"mitigation": "Idempotentes db/updates Script mit information_schema-Guard und Contract-Pruefung ueber DatabaseUpdatesContractTest + QG-003."
},
{
"risk": "Tri-state Semantik kann in UI und Persistenz inkonsistent werden.",
"mitigation": "Einheitliche Normalisierung im Service, explizite Mapping-Regeln (NULL/1/0) und gezielte Unit-Tests fuer jeden Zustand."
},
{
"risk": "Callback-Erweiterung koennte unbeabsichtigt Erfolgs-/Fehlerfluesse beeinflussen.",
"mitigation": "Token-Set nur nach erfolgreichem loginUserById und unveraenderte Redirect-/Flash-Fehlerpfade; manueller SSO-Smoke in QG-005."
}
]
}