Спецификация: RFC 7009
Через отзыв токенов клиент сообщает authorization server, что токен больше не нужен. Versola принимает и refresh, и access token; дальнейшее поведение для них различается, как описано в списках ниже.
Статус
Реализован. Отмечено пунктов: 17 из 20.
Endpoint
- Endpoint
POST /revoke(раздел 2); другие методы отклоняются - Тело запроса
application/x-www-form-urlencoded; запрос безtokenотклоняется сinvalid_request
Типы токенов
- Отзыв refresh token — токен сразу удаляется и больше не обменивается, а все access token, выданные тем же grant, отзываются (см. ниже)
- Отзыв access token — принимается; отзыв отправляется на back-channel endpoint клиента, и с этого момента
edgeотклоняет токен - Отклонение отозванного access token самим
auth— не реализовано:/introspectи/userinfoпродолжают принимать токен до его истечения - Тип токена определяется по формату (JWT — access token, все остальное — refresh token)
-
token_type_hintпринимается и игнорируется, что RFC допускает (RevocationSpec) -
unsupported_token_type— никогда не возвращается; значение, которого не мог держать ни один клиент, получает ответ 200
Где перестает работать отозванный access token
- На
back_channel_logout_uriклиента приходит подписанное событиеversola:event:access-token-revocation, называющее токен (revoked_jti) или все семейство refresh token (revoked_fam) вместе сrevoked_exp -
edgeсохраняет отзыв в таблицеrevocationsи отклоняет токен до егоexpна всех репликах (см. Edge;TokenRevocationFlowSpec) - Клиент без
back_channel_logout_uri— ничего не отправляется, поэтому отозванный access token остается действительным до истечения;/revokeвсе равно отвечает 200
Аутентификация клиента
- Аутентификация клиента обязательна в каждом запросе (раздел 2.1), в том числе для значения, которого не мог держать ни один клиент
-
client_secret_basicиclient_secret_post -
private_key_jwt(RFC 7523) -
tls_client_authиself_signed_tls_client_auth(RFC 8705) -
invalid_clientс HTTP 401 при неудачной аутентификации (RevocationSpec) - Публичный клиент аутентифицируется одним
client_id, кроме тенантаfapi2, который такое отклоняет
Поведение ответа
- HTTP 200 при успехе (раздел 2.2)
- HTTP 200 для неизвестных, уже отозванных или некорректных токенов (
RevocationSpec) - Клиент не может отозвать токен другого клиента —
invalid_client(RevocationSpec)
Примечания
- Access token — подписанные JWT, которых
authне записывает, поэтому отзыв — это уведомление, а не изменение состояния внутриauth. Resource server, проверяющим подпись локально, нужна проверкаedgeили подписка на событие back channel, чтобы узнать об отзыве. - Отзыв refresh token называет семейство токенов, а не отдельные access token, и ограничивает запись текущим TTL access token клиента.
Куда смотреть
Справочник OpenAPI содержит спецификацию отзыва, а Edge объясняет кеш отзывов, который отклоняет отозванные access-токены.