Add account recovery, visible access records and shared sign-out handoff
All checks were successful
CI Smoke / host-smoke (push) Successful in 0s
CI Smoke / container-smoke (push) Successful in 1s
Build and Publish Container Image / build-and-push (push) Successful in 1m21s

Assistant: codex
Assistant-Model: gpt-6-astra
Assistant-Session: 01a092fe-13b1-7f12-ac74-7d258af4d79c
This commit is contained in:
tegwick 2026-09-12 10:34:44 +02:00
parent 7330c25d80
commit e54b6ee970
5 changed files with 169 additions and 13 deletions

View file

@ -71,3 +71,20 @@ Use `user_engine.testing.scenarios` for human, tenant admin, platform
operator, delegated agent, invalid, expired, local issuer, and missing-tenant
fixtures. UIs should keep fixtures at the transport boundary and avoid
embedding identity-provider logic.
## Account recovery
`/access-recovery` is public and never starts OIDC automatically. It distinguishes
an unverified visitor from a verified current portal session, and exposes account
and logout controls. Browser errors strip callback query parameters before
reaching it. `/onboarding` shows the verified identity, sign-in tenant and roles,
personal tenant memberships and recorded application/service/workload/asset
memberships. These are the current user's records, not a fleet-wide entitlement
inventory or a grant to every application in a tenant. No workload record means
unknown/unrecorded access, not an inferred denial or grant.
POST `/logout` keeps its CSRF-protected local logout. With `scope=shared` it clears
the portal session and sends the browser to the configured issuer's
`/account/logout` confirmation, followed by provider-owned sign-out. No supplied
return URL is accepted. Other RP sessions and already issued JWTs may remain
valid. KEY-WP-0034 owns issuer confirmation; USER-WP-0026 tracks this recovery.