The user is signed out ends here | The host is a host of an enabled realm that has an issuer, the address is under its logout limit, the Authorization header is Bearer and one token, QAuth signed the token, for the issuer of this realm's tokens, the token has expired, the token is the one /auth/login mints for the developer portal, the token's subject is a user of this realm, the token is bound to no key, the request carries no session cookie of the user's | - Wait for a logout request: POST /auth/logout arrives
- Find the realm of the host: the request has its realm
- Count the request against the logout limit: the address is under its limit
- Check the Authorization header against the schema: the header matches the schema
- Read the token from the header: the header holds one token
- Verify the token, and accept it expired: the token has expired, but QAuth signed it: its claims are read anyway
- Accept only the portal's own token: the token is the portal's
- Refuse a DPoP-bound token: the token is bound to no key
- Find the token's user in this realm: the subject is a user of this realm
- End the user's browser sessions: the sessions are ended
- Invalidate the user's unredeemed authorization codes: the codes are spent
- Revoke every active refresh token of the user: the token has expired, so it is already inert and is not denylisted
- Record the sign-out: the event is recorded
|
The user is signed out, and the request's session cookie is cleared ends here | The host is a host of an enabled realm that has an issuer, the address is under its logout limit, the Authorization header is Bearer and one token, QAuth signed the token, for the issuer of this realm's tokens, the token has expired, the token is the one /auth/login mints for the developer portal, the token's subject is a user of this realm, the token is bound to no key, the request carries the session cookie of one of the user's browser sessions | - Wait for a logout request: POST /auth/logout arrives
- Find the realm of the host: the request has its realm
- Count the request against the logout limit: the address is under its limit
- Check the Authorization header against the schema: the header matches the schema
- Read the token from the header: the header holds one token
- Verify the token, and accept it expired: the token has expired, but QAuth signed it: its claims are read anyway
- Accept only the portal's own token: the token is the portal's
- Refuse a DPoP-bound token: the token is bound to no key
- Find the token's user in this realm: the subject is a user of this realm
- End the user's browser sessions: the sessions are ended
- Invalidate the user's unredeemed authorization codes: the codes are spent
- Revoke every active refresh token of the user: the token has expired, so it is already inert and is not denylisted
- Record the sign-out: the request's own session was one of those ended
|
Refuse a host QAuth does not answer for ends here | The host names no realm, a disabled realm or a realm with no issuer, the address is under its logout limit, the Authorization header is Bearer and one token, QAuth signed the token, for the issuer of this realm's tokens, the token has not expired, the token is the one /auth/login mints for the developer portal, the token's subject is a user of this realm, the token is bound to no key, the request carries no session cookie of the user's | - Wait for a logout request: POST /auth/logout arrives
- Find the realm of the host: the host names no enabled realm with an issuer
|
Refuse a request over the logout limit ends here | The host is a host of an enabled realm that has an issuer, this client address has used up its logout requests for the window, the Authorization header is Bearer and one token, QAuth signed the token, for the issuer of this realm's tokens, the token has not expired, the token is the one /auth/login mints for the developer portal, the token's subject is a user of this realm, the token is bound to no key, the request carries no session cookie of the user's | - Wait for a logout request: POST /auth/logout arrives
- Find the realm of the host: the request has its realm
- Count the request against the logout limit: the address has used up its logout requests
|
Refuse a missing or malformed Authorization header ends here | The host is a host of an enabled realm that has an issuer, the address is under its logout limit, the Authorization header is missing, or does not match ^Bearer .+$, QAuth signed the token, for the issuer of this realm's tokens, the token has not expired, the token is the one /auth/login mints for the developer portal, the token's subject is a user of this realm, the token is bound to no key, the request carries no session cookie of the user's | - Wait for a logout request: POST /auth/logout arrives
- Find the realm of the host: the request has its realm
- Count the request against the logout limit: the address is under its limit
- Check the Authorization header against the schema: the header is missing or does not match ^Bearer .+$
|
Refuse a header that holds no single token ends here | The host is a host of an enabled realm that has an issuer, the address is under its logout limit, the header matches ^Bearer .+$ but is not two parts split by one space, such as Bearer a b, QAuth signed the token, for the issuer of this realm's tokens, the token has not expired, the token is the one /auth/login mints for the developer portal, the token's subject is a user of this realm, the token is bound to no key, the request carries no session cookie of the user's | - Wait for a logout request: POST /auth/logout arrives
- Find the realm of the host: the request has its realm
- Count the request against the logout limit: the address is under its limit
- Check the Authorization header against the schema: the header matches the schema
- Read the token from the header: the header holds no single token
|
Refuse a token that does not verify ends here | The host is a host of an enabled realm that has an issuer, the address is under its logout limit, the Authorization header is Bearer and one token, the token is no JWT, its signature or issuer does not verify, or it is live and its typ or claims do not verify, the token has not expired, the token is the one /auth/login mints for the developer portal, the token's subject is a user of this realm, the token is bound to no key, the request carries no session cookie of the user's | - Wait for a logout request: POST /auth/logout arrives
- Find the realm of the host: the request has its realm
- Count the request against the logout limit: the address is under its limit
- Check the Authorization header against the schema: the header matches the schema
- Read the token from the header: the header holds one token
- Verify the token, and accept it expired: the token does not verify
|
Refuse a token issued to another client ends here | The host is a host of an enabled realm that has an issuer, the address is under its logout limit, the Authorization header is Bearer and one token, QAuth signed the token, for the issuer of this realm's tokens, the token has not expired, the token was issued to another client, the token's subject is a user of this realm, the token is bound to no key, the request carries no session cookie of the user's | - Wait for a logout request: POST /auth/logout arrives
- Find the realm of the host: the request has its realm
- Count the request against the logout limit: the address is under its limit
- Check the Authorization header against the schema: the header matches the schema
- Read the token from the header: the header holds one token
- Verify the token, and accept it expired: the token verifies
- Accept only the portal's own token: the token's client_id is not the system client's
|
Refuse a token that acts for an agent ends here | The host is a host of an enabled realm that has an issuer, the address is under its logout limit, the Authorization header is Bearer and one token, QAuth signed the token, for the issuer of this realm's tokens, the token has not expired, the token carries an act claim: it acts for an agent, the token's subject is a user of this realm, the token is bound to no key, the request carries no session cookie of the user's | - Wait for a logout request: POST /auth/logout arrives
- Find the realm of the host: the request has its realm
- Count the request against the logout limit: the address is under its limit
- Check the Authorization header against the schema: the header matches the schema
- Read the token from the header: the header holds one token
- Verify the token, and accept it expired: the token verifies
- Accept only the portal's own token: the token acts for an agent
|
Refuse a token for another audience ends here | The host is a host of an enabled realm that has an issuer, the address is under its logout limit, the Authorization header is Bearer and one token, QAuth signed the token, for the issuer of this realm's tokens, the token has not expired, the token was issued to the system client for another audience, the token's subject is a user of this realm, the token is bound to no key, the request carries no session cookie of the user's | - Wait for a logout request: POST /auth/logout arrives
- Find the realm of the host: the request has its realm
- Count the request against the logout limit: the address is under its limit
- Check the Authorization header against the schema: the header matches the schema
- Read the token from the header: the header holds one token
- Verify the token, and accept it expired: the token verifies
- Accept only the portal's own token: the token's audience is not exactly the developer API's (#524), nor, on a live token, the system client's id
|
Refuse a DPoP-bound token sent as a Bearer token ends here | The host is a host of an enabled realm that has an issuer, the address is under its logout limit, the Authorization header is Bearer and one token, QAuth signed the token, for the issuer of this realm's tokens, the token has not expired, the token is the one /auth/login mints for the developer portal, the token's subject is a user of this realm, the token is bound to a DPoP key (cnf), the request carries no session cookie of the user's | - Wait for a logout request: POST /auth/logout arrives
- Find the realm of the host: the request has its realm
- Count the request against the logout limit: the address is under its limit
- Check the Authorization header against the schema: the header matches the schema
- Read the token from the header: the header holds one token
- Verify the token, and accept it expired: the token verifies
- Accept only the portal's own token: the token is the portal's
- Refuse a DPoP-bound token: the token is bound to a DPoP key
|
Refuse a token that names no user of this realm ends here | The host is a host of an enabled realm that has an issuer, the address is under its logout limit, the Authorization header is Bearer and one token, QAuth signed the token, for the issuer of this realm's tokens, the token has not expired, the token is the one /auth/login mints for the developer portal, the token's subject names no user any more, the token is bound to no key, the request carries no session cookie of the user's | - Wait for a logout request: POST /auth/logout arrives
- Find the realm of the host: the request has its realm
- Count the request against the logout limit: the address is under its limit
- Check the Authorization header against the schema: the header matches the schema
- Read the token from the header: the header holds one token
- Verify the token, and accept it expired: the token verifies
- Accept only the portal's own token: the token is the portal's
- Refuse a DPoP-bound token: the token is bound to no key
- Find the token's user in this realm: the subject names no user of this realm: deleted since the token was minted, or a user of another realm
|
Refuse a token minted before the account was last disabled, once it is enabled again ends here | The host is a host of an enabled realm that has an issuer, the address is under its logout limit, the Authorization header is Bearer and one token, QAuth signed the token, for the issuer of this realm's tokens, the token has not expired, the token is the one /auth/login mints for the developer portal, the token's subject is a user of this realm, disabled after the token was minted and enabled again since, the token is bound to no key, the request carries no session cookie of the user's | - Wait for a logout request: POST /auth/logout arrives
- Find the realm of the host: the request has its realm
- Count the request against the logout limit: the address is under its limit
- Check the Authorization header against the schema: the header matches the schema
- Read the token from the header: the header holds one token
- Verify the token, and accept it expired: the token verifies
- Accept only the portal's own token: the token is the portal's
- Refuse a DPoP-bound token: the token is bound to no key
- Find the token's user in this realm: the account was disabled after the token was minted and is enabled again: the token must not sign the owner out of the sessions started since (#748)
|
Fail on a store error ends here | The host is a host of an enabled realm that has an issuer, the address is under its logout limit, the Authorization header is Bearer and one token, QAuth signed the token, for the issuer of this realm's tokens, the token has not expired, the token is the one /auth/login mints for the developer portal, the token's subject is a user of this realm, the token is bound to no key, the request carries no session cookie of the user's | - Wait for a logout request: POST /auth/logout arrives
- Find the realm of the host: the request has its realm
- Count the request against the logout limit: the address is under its limit
- Check the Authorization header against the schema: the header matches the schema
- Read the token from the header: the header holds one token
- Verify the token, and accept it expired: the token verifies
- Accept only the portal's own token: the token is the portal's
- Refuse a DPoP-bound token: the token is bound to no key
- Find the token's user in this realm: the subject is a user of this realm
- End the user's browser sessions: it fails, because the session store fails
|