forked from fa/breadcrumb-the-shire
225 lines
12 KiB
JSON
225 lines
12 KiB
JSON
{
|
|
"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."
|
|
}
|
|
]
|
|
} |