Send the browser back to the app, signed out redirect with state | The host is a host of an enabled realm that has an issuer, the address is under its end-session limit, the request is a GET, every parameter is given at most once and within its bound; the POST body is a form, an ID token this realm issued: its signature verifies with a key of the realm's token keys (EdDSA or RS256), its iss is the realm's issuer, its typ is an ID token's, and it has not expired, client_id is absent, or it is the valid hint's aud, post_logout_redirect_uri is, exactly, one of the post_logout_redirect_uris of the client the valid hint's aud or client_id names, that client may be used, and the operator set it up (the seed manifest), the browser's session is of the account the valid hint's sub names, the hint's sid is that session's, and the client the hint was issued to is known and may be used, INTERACTION_UI_ENABLED is off (the default): the end-session route draws the step as a plain form, the person signs out of the account the request is for, when the step is answered, the client still registers the return URI and may be used, the session the step was started for is still live when the step is answered | - Wait for an end-session request: GET /oauth/end-session with a query, or POST /oauth/end-session with a form, arrives
- Find the realm of the host: the request has its realm
- Count the request against the end-session limit: the address is under its limit
- Check the parameters against the schema: the parameters pass the schema
- Verify the id_token_hint, and accept it expired: the hint is read, or counted as absent
- Check client_id against the hint: client_id is absent or matches
- Check the return URI against the client's registration: there is no return URI, or it is registered
- Find the browser's session: the valid hint names the session's account: no confirmation is asked
- End the browser's session: the session is ended
- Record the sign-out: the request carries a registered return URI of a client the operator set up
|
Send the browser back to the app; it was not signed in redirect with state | The host is a host of an enabled realm that has an issuer, the address is under its end-session limit, the request is a GET, every parameter is given at most once and within its bound; the POST body is a form, the request carries no id_token_hint, client_id is absent, or it is the valid hint's aud, post_logout_redirect_uri is, exactly, one of the post_logout_redirect_uris of the client the valid hint's aud or client_id names, that client may be used, and the operator set it up (the seed manifest), the browser holds no live session of this realm, INTERACTION_UI_ENABLED is off (the default): the end-session route draws the step as a plain form, the person signs out of the account the request is for, when the step is answered, the client still registers the return URI and may be used, the session the step was started for is still live when the step is answered | - Wait for an end-session request: GET /oauth/end-session with a query, or POST /oauth/end-session with a form, arrives
- Find the realm of the host: the request has its realm
- Count the request against the end-session limit: the address is under its limit
- Check the parameters against the schema: the parameters pass the schema
- Verify the id_token_hint, and accept it expired: the hint is read, or counted as absent
- Check client_id against the hint: client_id is absent or matches
- Check the return URI against the client's registration: there is no return URI, or it is registered
- Find the browser's session: the browser holds no live session: nothing to end
- Record that there was nothing to end: the request carries a registered return URI of a client the operator set up
|
Show that the browser is signed out no redirect, page shown | The host is a host of an enabled realm that has an issuer, the address is under its end-session limit, the request is a GET, every parameter is given at most once and within its bound; the POST body is a form, an ID token this realm issued: its signature verifies with a key of the realm's token keys (EdDSA or RS256), its iss is the realm's issuer, its typ is an ID token's, and it has not expired, client_id is absent, or it is the valid hint's aud, the request carries no post_logout_redirect_uri, the browser's session is of the account the valid hint's sub names, the hint's sid is that session's, and the client the hint was issued to is known and may be used, INTERACTION_UI_ENABLED is off (the default): the end-session route draws the step as a plain form, the person signs out of the account the request is for, when the step is answered, the client still registers the return URI and may be used, the session the step was started for is still live when the step is answered | - Wait for an end-session request: GET /oauth/end-session with a query, or POST /oauth/end-session with a form, arrives
- Find the realm of the host: the request has its realm
- Count the request against the end-session limit: the address is under its limit
- Check the parameters against the schema: the parameters pass the schema
- Verify the id_token_hint, and accept it expired: the hint is read, or counted as absent
- Check client_id against the hint: client_id is absent or matches
- Check the return URI against the client's registration: there is no return URI, or it is registered
- Find the browser's session: the valid hint names the session's account: no confirmation is asked
- End the browser's session: the session is ended
- Record the sign-out: there is nowhere to return
|
Show that the browser is signed out; it was not signed in no redirect, page shown | The host is a host of an enabled realm that has an issuer, the address is under its end-session limit, the request is a GET, every parameter is given at most once and within its bound; the POST body is a form, the request carries no id_token_hint, client_id is absent, or it is the valid hint's aud, the request carries no post_logout_redirect_uri, the browser holds no live session of this realm, INTERACTION_UI_ENABLED is off (the default): the end-session route draws the step as a plain form, the person signs out of the account the request is for, when the step is answered, the client still registers the return URI and may be used, the session the step was started for is still live when the step is answered | - Wait for an end-session request: GET /oauth/end-session with a query, or POST /oauth/end-session with a form, arrives
- Find the realm of the host: the request has its realm
- Count the request against the end-session limit: the address is under its limit
- Check the parameters against the schema: the parameters pass the schema
- Verify the id_token_hint, and accept it expired: the hint is read, or counted as absent
- Check client_id against the hint: client_id is absent or matches
- Check the return URI against the client's registration: there is no return URI, or it is registered
- Find the browser's session: the browser holds no live session: nothing to end
- Record that there was nothing to end: there is nowhere to return
|
Show that the browser is signed out, with a link back to an app the operator did not set up no redirect, page shown | The host is a host of an enabled realm that has an issuer, the address is under its end-session limit, the request is a GET, every parameter is given at most once and within its bound; the POST body is a form, an ID token this realm issued: its signature verifies with a key of the realm's token keys (EdDSA or RS256), its iss is the realm's issuer, its typ is an ID token's, and it has not expired, client_id is absent, or it is the valid hint's aud, as registered, but the client was not set up by the operator (open dynamic registration, a CIMD document, the developer API): whoever registered it chose the URI, so the browser is not sent there before it has seen a QAuth page (RFC 9700 §4.11.2), the browser's session is of the account the valid hint's sub names, the hint's sid is that session's, and the client the hint was issued to is known and may be used, INTERACTION_UI_ENABLED is off (the default): the end-session route draws the step as a plain form, the person signs out of the account the request is for, when the step is answered, the client still registers the return URI and may be used, the session the step was started for is still live when the step is answered | - Wait for an end-session request: GET /oauth/end-session with a query, or POST /oauth/end-session with a form, arrives
- Find the realm of the host: the request has its realm
- Count the request against the end-session limit: the address is under its limit
- Check the parameters against the schema: the parameters pass the schema
- Verify the id_token_hint, and accept it expired: the hint is read, or counted as absent
- Check client_id against the hint: client_id is absent or matches
- Check the return URI against the client's registration: there is no return URI, or it is registered
- Find the browser's session: the valid hint names the session's account: no confirmation is asked
- End the browser's session: the session is ended
- Record the sign-out: the request carries a registered return URI of a client the operator did not set up
|
Show that the browser is signed out, with a link back to an app the operator did not set up; it was not signed in no redirect, page shown | The host is a host of an enabled realm that has an issuer, the address is under its end-session limit, the request is a GET, every parameter is given at most once and within its bound; the POST body is a form, the request carries no id_token_hint, client_id is absent, or it is the valid hint's aud, as registered, but the client was not set up by the operator (open dynamic registration, a CIMD document, the developer API): whoever registered it chose the URI, so the browser is not sent there before it has seen a QAuth page (RFC 9700 §4.11.2), the browser holds no live session of this realm, INTERACTION_UI_ENABLED is off (the default): the end-session route draws the step as a plain form, the person signs out of the account the request is for, when the step is answered, the client still registers the return URI and may be used, the session the step was started for is still live when the step is answered | - Wait for an end-session request: GET /oauth/end-session with a query, or POST /oauth/end-session with a form, arrives
- Find the realm of the host: the request has its realm
- Count the request against the end-session limit: the address is under its limit
- Check the parameters against the schema: the parameters pass the schema
- Verify the id_token_hint, and accept it expired: the hint is read, or counted as absent
- Check client_id against the hint: client_id is absent or matches
- Check the return URI against the client's registration: there is no return URI, or it is registered
- Find the browser's session: the browser holds no live session: nothing to end
- Record that there was nothing to end: the request carries a registered return URI of a client the operator did not set up
|
Send the browser back to the app after the person signed out redirect with state | The host is a host of an enabled realm that has an issuer, the address is under its end-session limit, the request is a GET, every parameter is given at most once and within its bound; the POST body is a form, the request carries no id_token_hint, client_id is absent, or it is the valid hint's aud, post_logout_redirect_uri is, exactly, one of the post_logout_redirect_uris of the client the valid hint's aud or client_id names, that client may be used, and the operator set it up (the seed manifest), the browser's session is of the account the valid hint's sub names, the hint's sid is that session's, and the client the hint was issued to is known and may be used, INTERACTION_UI_ENABLED is off (the default): the end-session route draws the step as a plain form, the person signs out of the account the request is for, when the step is answered, the client still registers the return URI and may be used, the session the step was started for is still live when the step is answered | - Wait for an end-session request: GET /oauth/end-session with a query, or POST /oauth/end-session with a form, arrives
- Find the realm of the host: the request has its realm
- Count the request against the end-session limit: the address is under its limit
- Check the parameters against the schema: the parameters pass the schema
- Verify the id_token_hint, and accept it expired: the hint is read, or counted as absent
- Check client_id against the hint: client_id is absent or matches
- Check the return URI against the client's registration: there is no return URI, or it is registered
- Find the browser's session: no valid hint names the account of the session: the person is asked
- Start the logout_confirm interaction: the interaction is stored, and the route draws the step itself
- Show the confirm step as a plain form: the person presses a button: the form posts the answer
- Check the answer against the step's grammar: the answer passes the grammar
- End the interaction before anything is decided: the interaction is over
- Read the decision: the person signs out (logout, or logout_all, which ends the same one session today)
- End the session the step was started for: the session is ended
- Record the sign-out: the client still registers the return URI
|
Send the browser to the status page after the person signed out no redirect, page shown | The host is a host of an enabled realm that has an issuer, the address is under its end-session limit, the request is a GET, every parameter is given at most once and within its bound; the POST body is a form, the request carries no id_token_hint, client_id is absent, or it is the valid hint's aud, the request carries no post_logout_redirect_uri, the browser's session is of the account the valid hint's sub names, the hint's sid is that session's, and the client the hint was issued to is known and may be used, INTERACTION_UI_ENABLED is off (the default): the end-session route draws the step as a plain form, the person signs out of the account the request is for, when the step is answered, the client still registers the return URI and may be used, the session the step was started for is still live when the step is answered | - Wait for an end-session request: GET /oauth/end-session with a query, or POST /oauth/end-session with a form, arrives
- Find the realm of the host: the request has its realm
- Count the request against the end-session limit: the address is under its limit
- Check the parameters against the schema: the parameters pass the schema
- Verify the id_token_hint, and accept it expired: the hint is read, or counted as absent
- Check client_id against the hint: client_id is absent or matches
- Check the return URI against the client's registration: there is no return URI, or it is registered
- Find the browser's session: no valid hint names the account of the session: the person is asked
- Start the logout_confirm interaction: the interaction is stored, and the route draws the step itself
- Show the confirm step as a plain form: the person presses a button: the form posts the answer
- Check the answer against the step's grammar: the answer passes the grammar
- End the interaction before anything is decided: the interaction is over
- Read the decision: the person signs out (logout, or logout_all, which ends the same one session today)
- End the session the step was started for: the session is ended
- Record the sign-out: there is nowhere to return, or no longer
|
Send the browser back to the app; its session had already ended redirect with state | The host is a host of an enabled realm that has an issuer, the address is under its end-session limit, the request is a GET, every parameter is given at most once and within its bound; the POST body is a form, the request carries no id_token_hint, client_id is absent, or it is the valid hint's aud, post_logout_redirect_uri is, exactly, one of the post_logout_redirect_uris of the client the valid hint's aud or client_id names, that client may be used, and the operator set it up (the seed manifest), the browser's session is of the account the valid hint's sub names, the hint's sid is that session's, and the client the hint was issued to is known and may be used, INTERACTION_UI_ENABLED is off (the default): the end-session route draws the step as a plain form, the person signs out of the account the request is for, when the step is answered, the client still registers the return URI and may be used, it ended meanwhile: a sign-out in another tab, a revoke, or its own end | - Wait for an end-session request: GET /oauth/end-session with a query, or POST /oauth/end-session with a form, arrives
- Find the realm of the host: the request has its realm
- Count the request against the end-session limit: the address is under its limit
- Check the parameters against the schema: the parameters pass the schema
- Verify the id_token_hint, and accept it expired: the hint is read, or counted as absent
- Check client_id against the hint: client_id is absent or matches
- Check the return URI against the client's registration: there is no return URI, or it is registered
- Find the browser's session: no valid hint names the account of the session: the person is asked
- Start the logout_confirm interaction: the interaction is stored, and the route draws the step itself
- Show the confirm step as a plain form: the person presses a button: the form posts the answer
- Check the answer against the step's grammar: the answer passes the grammar
- End the interaction before anything is decided: the interaction is over
- Read the decision: the person signs out, and the session has already ended
- Record that there was nothing left to end: the client still registers the return URI
|
Send the browser to the status page; its session had already ended no redirect, page shown | The host is a host of an enabled realm that has an issuer, the address is under its end-session limit, the request is a GET, every parameter is given at most once and within its bound; the POST body is a form, the request carries no id_token_hint, client_id is absent, or it is the valid hint's aud, the request carries no post_logout_redirect_uri, the browser's session is of the account the valid hint's sub names, the hint's sid is that session's, and the client the hint was issued to is known and may be used, INTERACTION_UI_ENABLED is off (the default): the end-session route draws the step as a plain form, the person signs out of the account the request is for, when the step is answered, the client still registers the return URI and may be used, it ended meanwhile: a sign-out in another tab, a revoke, or its own end | - Wait for an end-session request: GET /oauth/end-session with a query, or POST /oauth/end-session with a form, arrives
- Find the realm of the host: the request has its realm
- Count the request against the end-session limit: the address is under its limit
- Check the parameters against the schema: the parameters pass the schema
- Verify the id_token_hint, and accept it expired: the hint is read, or counted as absent
- Check client_id against the hint: client_id is absent or matches
- Check the return URI against the client's registration: there is no return URI, or it is registered
- Find the browser's session: no valid hint names the account of the session: the person is asked
- Start the logout_confirm interaction: the interaction is stored, and the route draws the step itself
- Show the confirm step as a plain form: the person presses a button: the form posts the answer
- Check the answer against the step's grammar: the answer passes the grammar
- End the interaction before anything is decided: the interaction is over
- Read the decision: the person signs out, and the session has already ended
- Record that there was nothing left to end: there is nowhere to return, or no longer
|
Send the browser back to the app, still signed in to QAuth redirect with state | The host is a host of an enabled realm that has an issuer, the address is under its end-session limit, the request is a GET, every parameter is given at most once and within its bound; the POST body is a form, the request carries no id_token_hint, client_id is absent, or it is the valid hint's aud, post_logout_redirect_uri is, exactly, one of the post_logout_redirect_uris of the client the valid hint's aud or client_id names, that client may be used, and the operator set it up (the seed manifest), the browser's session is of the account the valid hint's sub names, the hint's sid is that session's, and the client the hint was issued to is known and may be used, INTERACTION_UI_ENABLED is on: the ceremony app draws the step, the person signs out of the account the request is for, when the step is answered, the client still registers the return URI and may be used, the session the step was started for is still live when the step is answered | - Wait for an end-session request: GET /oauth/end-session with a query, or POST /oauth/end-session with a form, arrives
- Find the realm of the host: the request has its realm
- Count the request against the end-session limit: the address is under its limit
- Check the parameters against the schema: the parameters pass the schema
- Verify the id_token_hint, and accept it expired: the hint is read, or counted as absent
- Check client_id against the hint: client_id is absent or matches
- Check the return URI against the client's registration: there is no return URI, or it is registered
- Find the browser's session: no valid hint names the account of the session: the person is asked
- Start the logout_confirm interaction: the interaction is stored, and the ceremony app draws the step
- Send the browser to the ceremony page of the confirm step: the ceremony page reads the step by the interaction id
- Return the confirm step: the person cancels, with the CSRF value of this view
- Cancel the interaction: the interaction is cancelled
- Record that the person stayed signed in: the client still registers the return URI: the app has signed the person out of itself
|
Send the browser to the status page, still signed in no redirect, page shown | The host is a host of an enabled realm that has an issuer, the address is under its end-session limit, the request is a GET, every parameter is given at most once and within its bound; the POST body is a form, the request carries no id_token_hint, client_id is absent, or it is the valid hint's aud, the request carries no post_logout_redirect_uri, the browser's session is of the account the valid hint's sub names, the hint's sid is that session's, and the client the hint was issued to is known and may be used, INTERACTION_UI_ENABLED is on: the ceremony app draws the step, the person signs out of the account the request is for, when the step is answered, the client still registers the return URI and may be used, the session the step was started for is still live when the step is answered | - Wait for an end-session request: GET /oauth/end-session with a query, or POST /oauth/end-session with a form, arrives
- Find the realm of the host: the request has its realm
- Count the request against the end-session limit: the address is under its limit
- Check the parameters against the schema: the parameters pass the schema
- Verify the id_token_hint, and accept it expired: the hint is read, or counted as absent
- Check client_id against the hint: client_id is absent or matches
- Check the return URI against the client's registration: there is no return URI, or it is registered
- Find the browser's session: no valid hint names the account of the session: the person is asked
- Start the logout_confirm interaction: the interaction is stored, and the ceremony app draws the step
- Send the browser to the ceremony page of the confirm step: the ceremony page reads the step by the interaction id
- Return the confirm step: the person cancels, with the CSRF value of this view
- Cancel the interaction: the interaction is cancelled
- Record that the person stayed signed in: there is nowhere to return, or no longer
|
Say that the browser is signed out no redirect, page shown | The host is a host of an enabled realm that has an issuer, the address is under its end-session limit, the request is a GET, every parameter is given at most once and within its bound; the POST body is a form, the request carries no id_token_hint, client_id is absent, or it is the valid hint's aud, the request carries no post_logout_redirect_uri, the browser holds no live session of this realm, INTERACTION_UI_ENABLED is off (the default): the end-session route draws the step as a plain form, the person signs out of the account the request is for, when the step is answered, the client still registers the return URI and may be used, the session the step was started for is still live when the step is answered | - Wait for an end-session request: GET /oauth/end-session/status arrives
- Read whether the browser is still signed in: the browser holds no live session
|
Say that the browser is still signed in no redirect, page shown | The host is a host of an enabled realm that has an issuer, the address is under its end-session limit, the request is a GET, every parameter is given at most once and within its bound; the POST body is a form, the request carries no id_token_hint, client_id is absent, or it is the valid hint's aud, the request carries no post_logout_redirect_uri, the browser's session is of the account the valid hint's sub names, the hint's sid is that session's, and the client the hint was issued to is known and may be used, INTERACTION_UI_ENABLED is off (the default): the end-session route draws the step as a plain form, the person signs out of the account the request is for, when the step is answered, the client still registers the return URI and may be used, the session the step was started for is still live when the step is answered | - Wait for an end-session request: GET /oauth/end-session/status arrives
- Read whether the browser is still signed in: the browser holds a live session
|
Send a POST without the session cookie again as a GET no redirect, page shown | The host is a host of an enabled realm that has an issuer, the address is under its end-session limit, the request is a POST without the session cookie: the browser withholds a SameSite=Lax cookie from a cross-site POST, so it cannot tell whether it is signed in, every parameter is given at most once and within its bound; the POST body is a form, the request carries no id_token_hint, client_id is absent, or it is the valid hint's aud, the request carries no post_logout_redirect_uri, the browser holds no live session of this realm, INTERACTION_UI_ENABLED is off (the default): the end-session route draws the step as a plain form, the person signs out of the account the request is for, when the step is answered, the client still registers the return URI and may be used, the session the step was started for is still live when the step is answered | - Wait for an end-session request: GET /oauth/end-session with a query, or POST /oauth/end-session with a form, arrives
- Find the realm of the host: the request has its realm
- Count the request against the end-session limit: the address is under its limit
- Check the parameters against the schema: a POST came without the session cookie: it is sent again as a GET, which carries the cookie
|
Refuse a client_id that is not the hint's audience no redirect, page shown | The host is a host of an enabled realm that has an issuer, the address is under its end-session limit, the request is a GET, every parameter is given at most once and within its bound; the POST body is a form, an ID token this realm issued: its signature verifies with a key of the realm's token keys (EdDSA or RS256), its iss is the realm's issuer, its typ is an ID token's, and it has not expired, client_id and the aud of a valid hint name different clients (§2: the OP MUST verify they match), the request carries no post_logout_redirect_uri, the browser holds no live session of this realm, INTERACTION_UI_ENABLED is off (the default): the end-session route draws the step as a plain form, the person signs out of the account the request is for, when the step is answered, the client still registers the return URI and may be used, the session the step was started for is still live when the step is answered | - Wait for an end-session request: GET /oauth/end-session with a query, or POST /oauth/end-session with a form, arrives
- Find the realm of the host: the request has its realm
- Count the request against the end-session limit: the address is under its limit
- Check the parameters against the schema: the parameters pass the schema
- Verify the id_token_hint, and accept it expired: the hint is read, or counted as absent
- Check client_id against the hint: client_id is not the hint's audience; user.sign_out_failed (client_id_mismatch) is recorded
|
Refuse a return URI when no client is named no redirect, page shown | The host is a host of an enabled realm that has an issuer, the address is under its end-session limit, the request is a GET, every parameter is given at most once and within its bound; the POST body is a form, the request carries no id_token_hint, client_id is absent, or it is the valid hint's aud, post_logout_redirect_uri is given, and neither client_id nor a valid hint names a client, the browser holds no live session of this realm, INTERACTION_UI_ENABLED is off (the default): the end-session route draws the step as a plain form, the person signs out of the account the request is for, when the step is answered, the client still registers the return URI and may be used, the session the step was started for is still live when the step is answered | - Wait for an end-session request: GET /oauth/end-session with a query, or POST /oauth/end-session with a form, arrives
- Find the realm of the host: the request has its realm
- Count the request against the end-session limit: the address is under its limit
- Check the parameters against the schema: the parameters pass the schema
- Verify the id_token_hint, and accept it expired: the hint is read, or counted as absent
- Check client_id against the hint: client_id is absent or matches
- Check the return URI against the client's registration: no client is named; user.sign_out_failed (post_logout_redirect_uri_without_client) is recorded
|
Refuse a return URI the client did not register no redirect, page shown | The host is a host of an enabled realm that has an issuer, the address is under its end-session limit, the request is a GET, every parameter is given at most once and within its bound; the POST body is a form, the request carries no id_token_hint, client_id is absent, or it is the valid hint's aud, post_logout_redirect_uri is given, and the client named is unknown or does not register exactly that URI (a client that registered none never gets a redirect), the browser holds no live session of this realm, INTERACTION_UI_ENABLED is off (the default): the end-session route draws the step as a plain form, the person signs out of the account the request is for, when the step is answered, the client still registers the return URI and may be used, the session the step was started for is still live when the step is answered | - Wait for an end-session request: GET /oauth/end-session with a query, or POST /oauth/end-session with a form, arrives
- Find the realm of the host: the request has its realm
- Count the request against the end-session limit: the address is under its limit
- Check the parameters against the schema: the parameters pass the schema
- Verify the id_token_hint, and accept it expired: the hint is read, or counted as absent
- Check client_id against the hint: client_id is absent or matches
- Check the return URI against the client's registration: the client does not register the URI; user.sign_out_failed (post_logout_redirect_uri_not_registered)
|
Refuse a return URI of a disabled or suspended client no redirect, page shown | The host is a host of an enabled realm that has an issuer, the address is under its end-session limit, the request is a GET, every parameter is given at most once and within its bound; the POST body is a form, the request carries no id_token_hint, client_id is absent, or it is the valid hint's aud, post_logout_redirect_uri is given, and the client named is disabled or suspended, the browser holds no live session of this realm, INTERACTION_UI_ENABLED is off (the default): the end-session route draws the step as a plain form, the person signs out of the account the request is for, when the step is answered, the client still registers the return URI and may be used, the session the step was started for is still live when the step is answered | - Wait for an end-session request: GET /oauth/end-session with a query, or POST /oauth/end-session with a form, arrives
- Find the realm of the host: the request has its realm
- Count the request against the end-session limit: the address is under its limit
- Check the parameters against the schema: the parameters pass the schema
- Verify the id_token_hint, and accept it expired: the hint is read, or counted as absent
- Check client_id against the hint: client_id is absent or matches
- Check the return URI against the client's registration: the client is disabled or suspended; user.sign_out_failed (client_unusable) is recorded
|
Refuse a host QAuth does not answer for no redirect, page shown | The host names no realm, a disabled realm or a realm with no issuer, the address is under its end-session limit, the request is a GET, every parameter is given at most once and within its bound; the POST body is a form, the request carries no id_token_hint, client_id is absent, or it is the valid hint's aud, the request carries no post_logout_redirect_uri, the browser holds no live session of this realm, INTERACTION_UI_ENABLED is off (the default): the end-session route draws the step as a plain form, the person signs out of the account the request is for, when the step is answered, the client still registers the return URI and may be used, the session the step was started for is still live when the step is answered | - Wait for an end-session request: GET /oauth/end-session with a query, or POST /oauth/end-session with a form, arrives
- Find the realm of the host: the host names no enabled realm with an issuer
|
Refuse a request over the end-session limit no redirect, page shown | The host is a host of an enabled realm that has an issuer, this client address has used up its end-session requests for the window, the request is a GET, every parameter is given at most once and within its bound; the POST body is a form, the request carries no id_token_hint, client_id is absent, or it is the valid hint's aud, the request carries no post_logout_redirect_uri, the browser holds no live session of this realm, INTERACTION_UI_ENABLED is off (the default): the end-session route draws the step as a plain form, the person signs out of the account the request is for, when the step is answered, the client still registers the return URI and may be used, the session the step was started for is still live when the step is answered | - Wait for an end-session request: GET /oauth/end-session with a query, or POST /oauth/end-session with a form, arrives
- Find the realm of the host: the request has its realm
- Count the request against the end-session limit: the address has used up its end-session requests
|
Refuse parameters the schema does not accept no redirect, page shown | The host is a host of an enabled realm that has an issuer, the address is under its end-session limit, the request is a GET, a parameter is repeated or over its bound, or the POST body is not a form, the request carries no id_token_hint, client_id is absent, or it is the valid hint's aud, the request carries no post_logout_redirect_uri, the browser holds no live session of this realm, INTERACTION_UI_ENABLED is off (the default): the end-session route draws the step as a plain form, the person signs out of the account the request is for, when the step is answered, the client still registers the return URI and may be used, the session the step was started for is still live when the step is answered | - Wait for an end-session request: GET /oauth/end-session with a query, or POST /oauth/end-session with a form, arrives
- Find the realm of the host: the request has its realm
- Count the request against the end-session limit: the address is under its limit
- Check the parameters against the schema: a parameter is repeated or over its bound
|
Refuse an answer the step grammar does not accept no redirect, page shown | The host is a host of an enabled realm that has an issuer, the address is under its end-session limit, the request is a GET, every parameter is given at most once and within its bound; the POST body is a form, the request carries no id_token_hint, client_id is absent, or it is the valid hint's aud, the request carries no post_logout_redirect_uri, the browser's session is of the account the valid hint's sub names, the hint's sid is that session's, and the client the hint was issued to is known and may be used, INTERACTION_UI_ENABLED is off (the default): the end-session route draws the step as a plain form, the answer does not pass the step grammar: no decision, another one, or a member beyond type, csrf and decision, when the step is answered, the client still registers the return URI and may be used, the session the step was started for is still live when the step is answered | - Wait for an end-session request: GET /oauth/end-session with a query, or POST /oauth/end-session with a form, arrives
- Find the realm of the host: the request has its realm
- Count the request against the end-session limit: the address is under its limit
- Check the parameters against the schema: the parameters pass the schema
- Verify the id_token_hint, and accept it expired: the hint is read, or counted as absent
- Check client_id against the hint: client_id is absent or matches
- Check the return URI against the client's registration: there is no return URI, or it is registered
- Find the browser's session: no valid hint names the account of the session: the person is asked
- Start the logout_confirm interaction: the interaction is stored, and the route draws the step itself
- Show the confirm step as a plain form: the person presses a button: the form posts the answer
- Check the answer against the step's grammar: the answer does not pass the step grammar
|
Refuse an answer the expiry sweep beat no redirect, page shown | The host is a host of an enabled realm that has an issuer, the address is under its end-session limit, the request is a GET, every parameter is given at most once and within its bound; the POST body is a form, the request carries no id_token_hint, client_id is absent, or it is the valid hint's aud, the request carries no post_logout_redirect_uri, the browser's session is of the account the valid hint's sub names, the hint's sid is that session's, and the client the hint was issued to is known and may be used, INTERACTION_UI_ENABLED is off (the default): the end-session route draws the step as a plain form, the person signs out of the account the request is for, when the step is answered, the client still registers the return URI and may be used, the session the step was started for is still live when the step is answered | - Wait for an end-session request: GET /oauth/end-session with a query, or POST /oauth/end-session with a form, arrives
- Find the realm of the host: the request has its realm
- Count the request against the end-session limit: the address is under its limit
- Check the parameters against the schema: the parameters pass the schema
- Verify the id_token_hint, and accept it expired: the hint is read, or counted as absent
- Check client_id against the hint: client_id is absent or matches
- Check the return URI against the client's registration: there is no return URI, or it is registered
- Find the browser's session: no valid hint names the account of the session: the person is asked
- Start the logout_confirm interaction: the interaction is stored, and the route draws the step itself
- Show the confirm step as a plain form: the person presses a button: the form posts the answer
- Check the answer against the step's grammar: the answer passes the grammar
- End the interaction before anything is decided: it fails, because the expiry sweep claimed the interaction first
|
Refuse a cancel the expiry sweep beat no redirect, page shown | The host is a host of an enabled realm that has an issuer, the address is under its end-session limit, the request is a GET, every parameter is given at most once and within its bound; the POST body is a form, the request carries no id_token_hint, client_id is absent, or it is the valid hint's aud, the request carries no post_logout_redirect_uri, the browser's session is of the account the valid hint's sub names, the hint's sid is that session's, and the client the hint was issued to is known and may be used, INTERACTION_UI_ENABLED is on: the ceremony app draws the step, the person signs out of the account the request is for, when the step is answered, the client still registers the return URI and may be used, the session the step was started for is still live when the step is answered | - Wait for an end-session request: GET /oauth/end-session with a query, or POST /oauth/end-session with a form, arrives
- Find the realm of the host: the request has its realm
- Count the request against the end-session limit: the address is under its limit
- Check the parameters against the schema: the parameters pass the schema
- Verify the id_token_hint, and accept it expired: the hint is read, or counted as absent
- Check client_id against the hint: client_id is absent or matches
- Check the return URI against the client's registration: there is no return URI, or it is registered
- Find the browser's session: no valid hint names the account of the session: the person is asked
- Start the logout_confirm interaction: the interaction is stored, and the ceremony app draws the step
- Send the browser to the ceremony page of the confirm step: the ceremony page reads the step by the interaction id
- Return the confirm step: the person cancels, with the CSRF value of this view
- Cancel the interaction: it fails, because the expiry sweep claimed the interaction first
|
Fail on an event store error no redirect, page shown | The host is a host of an enabled realm that has an issuer, the address is under its end-session limit, the request is a GET, every parameter is given at most once and within its bound; the POST body is a form, the request carries no id_token_hint, client_id is absent, or it is the valid hint's aud, the request carries no post_logout_redirect_uri, the browser holds no live session of this realm, INTERACTION_UI_ENABLED is off (the default): the end-session route draws the step as a plain form, the person signs out of the account the request is for, when the step is answered, the client still registers the return URI and may be used, the session the step was started for is still live when the step is answered | - Wait for an end-session request: GET /oauth/end-session with a query, or POST /oauth/end-session with a form, arrives
- Find the realm of the host: the request has its realm
- Count the request against the end-session limit: the address is under its limit
- Check the parameters against the schema: the parameters pass the schema
- Verify the id_token_hint, and accept it expired: the hint is read, or counted as absent
- Check client_id against the hint: client_id is absent or matches
- Check the return URI against the client's registration: there is no return URI, or it is registered
- Find the browser's session: the browser holds no live session: nothing to end
- Record that there was nothing to end: it fails, because the event store fails
|
Fail on a session store error no redirect, page shown | The host is a host of an enabled realm that has an issuer, the address is under its end-session limit, the request is a GET, every parameter is given at most once and within its bound; the POST body is a form, an ID token this realm issued: its signature verifies with a key of the realm's token keys (EdDSA or RS256), its iss is the realm's issuer, its typ is an ID token's, and it has not expired, client_id is absent, or it is the valid hint's aud, the request carries no post_logout_redirect_uri, the browser's session is of the account the valid hint's sub names, the hint's sid is that session's, and the client the hint was issued to is known and may be used, INTERACTION_UI_ENABLED is off (the default): the end-session route draws the step as a plain form, the person signs out of the account the request is for, when the step is answered, the client still registers the return URI and may be used, the session the step was started for is still live when the step is answered | - Wait for an end-session request: GET /oauth/end-session with a query, or POST /oauth/end-session with a form, arrives
- Find the realm of the host: the request has its realm
- Count the request against the end-session limit: the address is under its limit
- Check the parameters against the schema: the parameters pass the schema
- Verify the id_token_hint, and accept it expired: the hint is read, or counted as absent
- Check client_id against the hint: client_id is absent or matches
- Check the return URI against the client's registration: there is no return URI, or it is registered
- Find the browser's session: the valid hint names the session's account: no confirmation is asked
- End the browser's session: it fails, because the session store fails
|
Fail on an interaction store error at the start no redirect, page shown | The host is a host of an enabled realm that has an issuer, the address is under its end-session limit, the request is a GET, every parameter is given at most once and within its bound; the POST body is a form, the request carries no id_token_hint, client_id is absent, or it is the valid hint's aud, the request carries no post_logout_redirect_uri, the browser's session is of the account the valid hint's sub names, the hint's sid is that session's, and the client the hint was issued to is known and may be used, INTERACTION_UI_ENABLED is off (the default): the end-session route draws the step as a plain form, the person signs out of the account the request is for, when the step is answered, the client still registers the return URI and may be used, the session the step was started for is still live when the step is answered | - Wait for an end-session request: GET /oauth/end-session with a query, or POST /oauth/end-session with a form, arrives
- Find the realm of the host: the request has its realm
- Count the request against the end-session limit: the address is under its limit
- Check the parameters against the schema: the parameters pass the schema
- Verify the id_token_hint, and accept it expired: the hint is read, or counted as absent
- Check client_id against the hint: client_id is absent or matches
- Check the return URI against the client's registration: there is no return URI, or it is registered
- Find the browser's session: no valid hint names the account of the session: the person is asked
- Start the logout_confirm interaction: it fails, because the interaction store fails
|
Fail on an interaction store error at the answer or the cancel no redirect, page shown | The host is a host of an enabled realm that has an issuer, the address is under its end-session limit, the request is a GET, every parameter is given at most once and within its bound; the POST body is a form, the request carries no id_token_hint, client_id is absent, or it is the valid hint's aud, the request carries no post_logout_redirect_uri, the browser's session is of the account the valid hint's sub names, the hint's sid is that session's, and the client the hint was issued to is known and may be used, INTERACTION_UI_ENABLED is off (the default): the end-session route draws the step as a plain form, the person signs out of the account the request is for, when the step is answered, the client still registers the return URI and may be used, the session the step was started for is still live when the step is answered | - Wait for an end-session request: GET /oauth/end-session with a query, or POST /oauth/end-session with a form, arrives
- Find the realm of the host: the request has its realm
- Count the request against the end-session limit: the address is under its limit
- Check the parameters against the schema: the parameters pass the schema
- Verify the id_token_hint, and accept it expired: the hint is read, or counted as absent
- Check client_id against the hint: client_id is absent or matches
- Check the return URI against the client's registration: there is no return URI, or it is registered
- Find the browser's session: no valid hint names the account of the session: the person is asked
- Start the logout_confirm interaction: the interaction is stored, and the route draws the step itself
- Show the confirm step as a plain form: the person presses a button: the form posts the answer
- Check the answer against the step's grammar: the answer passes the grammar
- End the interaction before anything is decided: it fails, because the interaction store fails; the turn is given back
|
Fail on a session store error after the interaction finished no redirect, page shown | The host is a host of an enabled realm that has an issuer, the address is under its end-session limit, the request is a GET, every parameter is given at most once and within its bound; the POST body is a form, the request carries no id_token_hint, client_id is absent, or it is the valid hint's aud, the request carries no post_logout_redirect_uri, the browser's session is of the account the valid hint's sub names, the hint's sid is that session's, and the client the hint was issued to is known and may be used, INTERACTION_UI_ENABLED is off (the default): the end-session route draws the step as a plain form, the person signs out of the account the request is for, when the step is answered, the client still registers the return URI and may be used, the session the step was started for is still live when the step is answered | - Wait for an end-session request: GET /oauth/end-session with a query, or POST /oauth/end-session with a form, arrives
- Find the realm of the host: the request has its realm
- Count the request against the end-session limit: the address is under its limit
- Check the parameters against the schema: the parameters pass the schema
- Verify the id_token_hint, and accept it expired: the hint is read, or counted as absent
- Check client_id against the hint: client_id is absent or matches
- Check the return URI against the client's registration: there is no return URI, or it is registered
- Find the browser's session: no valid hint names the account of the session: the person is asked
- Start the logout_confirm interaction: the interaction is stored, and the route draws the step itself
- Show the confirm step as a plain form: the person presses a button: the form posts the answer
- Check the answer against the step's grammar: the answer passes the grammar
- End the interaction before anything is decided: the interaction is over
- Read the decision: the person signs out (logout, or logout_all, which ends the same one session today)
- End the session the step was started for: it fails, because the session store fails
|
Fail on an event store error after the interaction finished no redirect, page shown | The host is a host of an enabled realm that has an issuer, the address is under its end-session limit, the request is a GET, every parameter is given at most once and within its bound; the POST body is a form, the request carries no id_token_hint, client_id is absent, or it is the valid hint's aud, the request carries no post_logout_redirect_uri, the browser's session is of the account the valid hint's sub names, the hint's sid is that session's, and the client the hint was issued to is known and may be used, INTERACTION_UI_ENABLED is on: the ceremony app draws the step, the person signs out of the account the request is for, when the step is answered, the client still registers the return URI and may be used, the session the step was started for is still live when the step is answered | - Wait for an end-session request: GET /oauth/end-session with a query, or POST /oauth/end-session with a form, arrives
- Find the realm of the host: the request has its realm
- Count the request against the end-session limit: the address is under its limit
- Check the parameters against the schema: the parameters pass the schema
- Verify the id_token_hint, and accept it expired: the hint is read, or counted as absent
- Check client_id against the hint: client_id is absent or matches
- Check the return URI against the client's registration: there is no return URI, or it is registered
- Find the browser's session: no valid hint names the account of the session: the person is asked
- Start the logout_confirm interaction: the interaction is stored, and the ceremony app draws the step
- Send the browser to the ceremony page of the confirm step: the ceremony page reads the step by the interaction id
- Return the confirm step: the person cancels, with the CSRF value of this view
- Cancel the interaction: the interaction is cancelled
- Record that the person stayed signed in: it fails, because the event store fails
|