Authorized assessment of SSO single logout (SLO) and cross-app session propagation: IdP/SP logout, front- vs back-channel termination, RP-initiated logout, refresh-token and cookie invalidation, and residual sessions after “logout everywhere.” Use when SSO logout, SLO, end_session, LogoutRequest, or peer apps staying signed in after logout appear in scope.
Authorized assessment of SSO single logout (SLO) and cross-app session propagation: IdP/SP logout, front- vs back-channel termination, RP-initiated logout, refresh-token and cookie invalidation, and residual sessions after “logout everywhere.” Use when SSO logout, SLO, end_session, LogoutRequest, or peer apps staying signed in after logout appear in scope.
SSO Logout Propagation (Authorized Assessment)
Methodology for single logout, logout propagation, and residual sessions across IdP and relying parties (SPs/RPs). Focus: whether logout at one place ends sessions and tokens elsewhere — not login-time crypto (hand those off).
When To Use
Situation
Direction
“Log out”, “Sign out everywhere”, SSO portal exit, multi-app suite logout
Graph: User → App A / App B / API → IdP. State which edges logout claims to cut.
2. Baseline multi-session setup
With test user V only: open concurrent sessions (App A, App B or second profile, optional mobile/API with refresh token). Record canaries (whoami, account page) and hash/last-4 of SIDs or refresh ids. Without concurrent sessions, propagation failure is not demonstrable.
3. RP-initiated logout (app-first)
From App A, trigger normal logout:
Check
Secure expectation
Weak signal
Local App A session
Cookie cleared and server record destroyed
Client clear only; SID still valid if replayed
IdP SSO session
Ended when product claims global logout
Silent SSO re-enters App A
App B session
Ended if SLO advertised
App B still serves V’s canary
Access / refresh tokens
AT rejected or short residual; RT revoked
RT still mints AT
post_logout_redirect_uri
Exact allowlist
Open redirect after logout
Replay pre-logout Cookie/Bearer from a second client. Finding: server still accepts it after “logout.”
4. IdP-initiated / global logout
From IdP “sign out” / “all applications”: note front-channel hits to each RP logout URL (missing RPs matter); if back-channel exists, check logout token verification (iss, aud, sid, signature). Retest App A, App B, and API.
Secure baseline: every registered V session dies, or docs clearly scope logout to “this app only” (then residual peers are not a bug — document expected behavior). Finding: UI claims “all apps” but peer RP or refresh token survives.
5. Protocol-specific SLO probes
OIDC/OAuth:end_session without id_token_hint/sid (wrong session or no-op?); weak post_logout_redirect_uri; revoke endpoint coverage (one RT vs siblings); front-channel iframe ignored; GET logout without binding (logout CSRF — integrity/availability note). Login redirect/state/PKCE → oauth-oidc-misconfiguration.
SAML: unsigned or attacker-signed LogoutRequest/LogoutResponse accepted?; SP clears local session but never notifies IdP (or inverse). Login signature/Audience/ACS → saml-sso-basics; keep this skill on logout message acceptance and teardown.
6. Propagation gaps
Gap
Test
Offline mobile / closed tab
Logout elsewhere; reopen later still authed?
Shared subdomain cookies
Logout on app. leaves admin. valid
Secondary tokens
remember-me, WS ticket, impersonation cookie
Privilege cookies
MFA/step-up cookie survives primary logout
Race
Parallel API during logout still 200?
Missing regenerate-on-login → session-fixation-management; here: invalidate on logout.
7. Remediation (report-ready)
Server-destroy sessions; clear cookies with matching flags; revoke refresh grants; complete SLO (OIDC front/back-channel; SAML SLO with signed requests and correct SessionIndex/NameID); exact-match post_logout_redirect_uri; verify back-channel logout tokens; honest product scope (“this app” vs “everywhere”); CSRF protection on state-changing logout; retest concurrent sessions. Pair implementation with code-quality-standards.