The app logged the session out ends here | The session had signed the person in to at least one app with a backchannel_logout_uri, the client has a backchannel_logout_uri when the delivery role lists its destinations, the client is enabled, not suspended, of the event's realm, and still has its URI, the client did not set backchannel_logout_session_required, the event names the session by its sid, as every session QAuth creates has one, the client's own registration set the URI (dynamic registration, a CIMD document), every address the host resolves to now is public, the deployment allowlist names neither the host nor its range for the client's realm, the app answers 200, or 204 as some frameworks do (§2.8), the delivery has attempts left | - End the sessions, and queue a notice for each client they served: the session ends and its notices are queued, in the same commit
- The notices wait in the event store: the delivery role's next poll reaches the event
- Match the event to its client: one delivery row for this client and this session
- Wait for the delivery role to claim the delivery: the delivery role claims the row, counting one attempt
- Read the client as it is now: the client still takes the notice
- Have the signer role sign the logout token: the signer answers a compact JWS
- Check the destination again through the egress client: the destination passes
- POST the logout token to the app: the app answers 2xx
|
The app refused the logout token ends here | The session had signed the person in to at least one app with a backchannel_logout_uri, the client has a backchannel_logout_uri when the delivery role lists its destinations, the client is enabled, not suspended, of the event's realm, and still has its URI, the client did not set backchannel_logout_session_required, the event names the session by its sid, as every session QAuth creates has one, the client's own registration set the URI (dynamic registration, a CIMD document), every address the host resolves to now is public, the deployment allowlist names neither the host nor its range for the client's realm, the app answers 400, or another status no retry changes: a redirect, 401, 403, 404, the delivery has attempts left | - End the sessions, and queue a notice for each client they served: the session ends and its notices are queued, in the same commit
- The notices wait in the event store: the delivery role's next poll reaches the event
- Match the event to its client: one delivery row for this client and this session
- Wait for the delivery role to claim the delivery: the delivery role claims the row, counting one attempt
- Read the client as it is now: the client still takes the notice
- Have the signer role sign the logout token: the signer answers a compact JWS
- Check the destination again through the egress client: the destination passes
- POST the logout token to the app: the app answers 400 or another status no retry changes
|
Every attempt failed ends here | The session had signed the person in to at least one app with a backchannel_logout_uri, the client has a backchannel_logout_uri when the delivery role lists its destinations, the client is enabled, not suspended, of the event's realm, and still has its URI, the client did not set backchannel_logout_session_required, the event names the session by its sid, as every session QAuth creates has one, the client's own registration set the URI (dynamic registration, a CIMD document), every address the host resolves to now is public, the deployment allowlist names neither the host nor its range for the client's realm, the app answers 200, or 204 as some frameworks do (§2.8), this was its last attempt | - End the sessions, and queue a notice for each client they served: the session ends and its notices are queued, in the same commit
- The notices wait in the event store: the delivery role's next poll reaches the event
- Match the event to its client: one delivery row for this client and this session
- Wait for the delivery role to claim the delivery: the delivery role claims the row, counting one attempt
- Read the client as it is now: it fails, because the client cannot be read now
- Record the failed attempt: that was the last attempt
|
Nothing is sent to a client that no longer exists ends here | The session had signed the person in to at least one app with a backchannel_logout_uri, the client has a backchannel_logout_uri when the delivery role lists its destinations, the client was deleted since, or the row is of another realm, the client did not set backchannel_logout_session_required, the event names the session by its sid, as every session QAuth creates has one, the client's own registration set the URI (dynamic registration, a CIMD document), every address the host resolves to now is public, the deployment allowlist names neither the host nor its range for the client's realm, the app answers 200, or 204 as some frameworks do (§2.8), the delivery has attempts left | - End the sessions, and queue a notice for each client they served: the session ends and its notices are queued, in the same commit
- The notices wait in the event store: the delivery role's next poll reaches the event
- Match the event to its client: one delivery row for this client and this session
- Wait for the delivery role to claim the delivery: the delivery role claims the row, counting one attempt
- Read the client as it is now: the client is gone, or of another realm
|
Nothing is sent to a disabled or suspended client ends here | The session had signed the person in to at least one app with a backchannel_logout_uri, the client has a backchannel_logout_uri when the delivery role lists its destinations, the client was disabled or suspended since, the client did not set backchannel_logout_session_required, the event names the session by its sid, as every session QAuth creates has one, the client's own registration set the URI (dynamic registration, a CIMD document), every address the host resolves to now is public, the deployment allowlist names neither the host nor its range for the client's realm, the app answers 200, or 204 as some frameworks do (§2.8), the delivery has attempts left | - End the sessions, and queue a notice for each client they served: the session ends and its notices are queued, in the same commit
- The notices wait in the event store: the delivery role's next poll reaches the event
- Match the event to its client: one delivery row for this client and this session
- Wait for the delivery role to claim the delivery: the delivery role claims the row, counting one attempt
- Read the client as it is now: the client is disabled or suspended
|
Nothing is sent to a client that dropped its URI ends here | The session had signed the person in to at least one app with a backchannel_logout_uri, the client has a backchannel_logout_uri when the delivery role lists its destinations, the client dropped its backchannel_logout_uri since, the client did not set backchannel_logout_session_required, the event names the session by its sid, as every session QAuth creates has one, the client's own registration set the URI (dynamic registration, a CIMD document), every address the host resolves to now is public, the deployment allowlist names neither the host nor its range for the client's realm, the app answers 200, or 204 as some frameworks do (§2.8), the delivery has attempts left | - End the sessions, and queue a notice for each client they served: the session ends and its notices are queued, in the same commit
- The notices wait in the event store: the delivery role's next poll reaches the event
- Match the event to its client: one delivery row for this client and this session
- Wait for the delivery role to claim the delivery: the delivery role claims the row, counting one attempt
- Read the client as it is now: the client no longer has a backchannel_logout_uri
|
Nothing is sent when the client requires a sid the notice lacks ends here | The session had signed the person in to at least one app with a backchannel_logout_uri, the client has a backchannel_logout_uri when the delivery role lists its destinations, the client is enabled, not suspended, of the event's realm, and still has its URI, the client set backchannel_logout_session_required, the event names no sid, the client's own registration set the URI (dynamic registration, a CIMD document), every address the host resolves to now is public, the deployment allowlist names neither the host nor its range for the client's realm, the app answers 200, or 204 as some frameworks do (§2.8), the delivery has attempts left | - End the sessions, and queue a notice for each client they served: the session ends and its notices are queued, in the same commit
- The notices wait in the event store: the delivery role's next poll reaches the event
- Match the event to its client: one delivery row for this client and this session
- Wait for the delivery role to claim the delivery: the delivery role claims the row, counting one attempt
- Read the client as it is now: the client requires a sid and the event names none: nothing is sent
|
A client without a back-channel logout URI gets nothing ends here | The session had signed the person in to at least one app with a backchannel_logout_uri, the client registered none, or was deleted, disabled or suspended, before the fan-out, the client is enabled, not suspended, of the event's realm, and still has its URI, the client did not set backchannel_logout_session_required, the event names the session by its sid, as every session QAuth creates has one, the client's own registration set the URI (dynamic registration, a CIMD document), every address the host resolves to now is public, the deployment allowlist names neither the host nor its range for the client's realm, the app answers 200, or 204 as some frameworks do (§2.8), the delivery has attempts left | - End the sessions, and queue a notice for each client they served: the session ends and its notices are queued, in the same commit
- The notices wait in the event store: the delivery role's next poll reaches the event
- Match the event to its client: no destination matches: the client registered no URI, so it gets nothing
|
The session ended, and served no app ends here | The session never got as far as an app, or none of its apps registered a backchannel_logout_uri, the client has a backchannel_logout_uri when the delivery role lists its destinations, the client is enabled, not suspended, of the event's realm, and still has its URI, the client did not set backchannel_logout_session_required, the event names the session by its sid, as every session QAuth creates has one, the client's own registration set the URI (dynamic registration, a CIMD document), every address the host resolves to now is public, the deployment allowlist names neither the host nor its range for the client's realm, the app answers 200, or 204 as some frameworks do (§2.8), the delivery has attempts left | - End the sessions, and queue a notice for each client they served: the session ends; it served no app with a backchannel_logout_uri, so nothing is queued
|
Nothing ended ends here | The session had signed the person in to at least one app with a backchannel_logout_uri, the client has a backchannel_logout_uri when the delivery role lists its destinations, the client is enabled, not suspended, of the event's realm, and still has its URI, the client did not set backchannel_logout_session_required, the event names the session by its sid, as every session QAuth creates has one, the client's own registration set the URI (dynamic registration, a CIMD document), every address the host resolves to now is public, the deployment allowlist names neither the host nor its range for the client's realm, the app answers 200, or 204 as some frameworks do (§2.8), the delivery has attempts left | - End the sessions, and queue a notice for each client they served: it fails, because Postgres cannot store the change: the transaction rolls back
|