Specification: RFC 7009
Token Revocation lets a client tell the authorization server that a token is no longer needed. Versola accepts both refresh tokens and access tokens; what happens next differs between the two, as the lists below spell out.
Status
Implemented. Checked claims: 17 of 20.
Endpoint
-
POST /revokeendpoint (Section 2); other methods are refused -
application/x-www-form-urlencodedrequest body; a request withouttokenis refused withinvalid_request
Token types
- Refresh token revocation — the token is deleted at once, so it can no longer be exchanged, and every access token the same grant issued is revoked (see below)
- Access token revocation — accepted; the revocation is pushed to the client’s back-channel endpoint, and
edgerejects the token from then on - Access token rejected by
authitself after revocation — not implemented:/introspectand/userinfokeep honouring the token until it expires - Token type detected by format (a JWT is an access token, anything else is a refresh token)
-
token_type_hintis accepted and ignored, which the RFC permits (RevocationSpec) -
unsupported_token_type— never returned; a value no client could hold is answered with 200
Where a revoked access token stops working
- The client’s
back_channel_logout_urireceives a signed event,versola:event:access-token-revocation, naming the token (revoked_jti) or the whole refresh-token family (revoked_fam) together withrevoked_exp -
edgestores the revocation in therevocationstable and refuses the token before itsexp, on every replica (see Edge;TokenRevocationFlowSpec) - A client with no
back_channel_logout_uri— nothing is pushed, so a revoked access token stays valid until it expires;/revokestill answers 200
Client authentication
- Client authentication required on every request (Section 2.1), including for a value no client could hold
-
client_secret_basicandclient_secret_post -
private_key_jwt(RFC 7523) -
tls_client_authandself_signed_tls_client_auth(RFC 8705) -
invalid_clientwith HTTP 401 when authentication fails (RevocationSpec) - A public client authenticates with its
client_idalone, except on afapi2tenant, which refuses it
Response behaviour
- HTTP 200 on success (Section 2.2)
- HTTP 200 for unknown, already revoked or malformed tokens (
RevocationSpec) - A client cannot revoke another client’s token —
invalid_client(RevocationSpec)
Notes
- Access tokens are signed JWTs that
authdoes not record, so revoking one is a notification, not a state change insideauth. Resource servers that verify the signature locally need theedgecheck, or a subscription to the back-channel event, to learn about it. - A refresh token revocation names the token family, not individual access tokens, and bounds the entry by the client’s current access token TTL.
Where to look
The OpenAPI reference has the revocation specification, and Edge explains the revocation cache that rejects revoked access tokens.