---
metadata:
  - name: generator
    content: Diplodoc Platform v5.44.0
alternate:
  - https://yandex.com/dev/id/doc/en/tokens/token-invalidate.md
  - https://yandex.com/dev/id/doc/ru/tokens/token-invalidate.md
---
> **Documentation Index:** Fetch the complete configuration index at https://yandex.com/dev/id/doc/ru/llms.txt

# Отзыв токенов

Яндекс OAuth отзывает токены в следующих случаях:

* Доступ был отозван пользователем на странице [Доступы к данным](https://id.yandex.ru/personal/data-access). При отзыве OAuth-токена соответствующий refresh-токен отзывается автоматически.

* Срок жизни токена истек.

* Владелец приложения изменил запрашиваемые права либо удалил приложение. В этом случае отзываются все токены, когда-либо выданные этому приложению.

* Пользователь совершил действие, при котором отзываются все OAuth-токены и refresh-токены, когда-либо выданные для учетной записи:

  * изменил пароль;
  
  * включил или выключил [двухфакторную аутентификацию](https://yandex.ru/support/id/authorization/twofa.html);
  
  * успешно восстановил доступ к аккаунту;
  
  * перешел по ссылке **Выйти везде** в [Яндекс ID](https://id.yandex.ru/security/devices) или на каком-то другом сервисе.

## Отзыв токенов в приложении {#token-revocation}

Приложение может отзывать OAuth-токены, которые были [выданы для определенного устройства](#device-token), с помощью специального запроса к Яндекс OAuth.

Чтобы реализовать выход из учетной записи для обычных токенов, можно удалять соответствующие ей токены из локального хранилища — восстановить удаленный токен через Яндекс OAuth невозможно, приложение должно будет запросить доступ заново.

При этом для пользователя на странице [Доступы к данным](https://id.yandex.ru/personal/data-access) ничего не изменится. Токен, выданный приложению, будет считаться активным, пока не будет отозван каким-либо из перечисленных выше способом.

## Отзыв токена для устройства {#device-token}

Яндекс OAuth позволяет запросить токен для приложения на конкретном устройстве. Для этого в запросе токена или кода подтверждения следует указать идентификатор устройства и его имя (параметры `device_id` и `device_name` описаны в форматах запросов на страницах этого документа). Это имя пользователь сможет увидеть на [странице управления доступом](https://id.yandex.ru/personal/data-access) в API Яндекс ID. Если указать только идентификатор, без имени, токен будет помечен как выданный для неизвестного устройства.

<!-- source: ru/_includes/oauth/concepts/device-token/id-device-token/limit.md -->
{% note alert %}

У приложения не может быть больше 30 токенов, привязанных к устройствам определенного пользователя. Если Яндекс OAuth успешно выдает приложению новый токен для устройства, самый старый из таких токенов перестает работать.

{% endnote %}
<!-- endsource: ru/_includes/oauth/concepts/device-token/id-device-token/limit.md -->

Токен, выданный для определенного устройства, можно отозвать запросом к Яндекс OAuth, например, чтобы гарантировать выход из аккаунта.

Чтобы отозвать токен, нужно передать его в Яндекс OAuth с идентификатором и паролем приложения.

### Аутентификация приложения {#app-auth}

В запросах к Яндекс OAuth следует указывать идентификатор и пароль, которые были сгенерированы при [регистрации приложения](https://yandex.com/dev/id/doc/ru/register-client.md).

В запросе их можно передать разными способами:

* В заголовке `Authorization`, в строке `<client_id>:<client_secret>`, закодированной методом base64. При этом следует указывать базовый (`Basic`) метод авторизации.

   Пример заголовка:

   ```
   Authorization: Basic <закодированная строка client_id:client_secret>
   ```

* В теле POST-запроса, в параметрах `client_id` и `client_secret`. Эти параметры обязательно должны передаваться одновременно.

Если Яндекс OAuth получает заголовок `Authorization`, параметры `client_id` и `client_secret` в теле запроса игнорируются.

### Формат запроса {#cleartext}

Запрос следует отправлять по протоколу HTTPS c помощью метода POST.

```
POST /revoke_token HTTP/1.1
Host: https://oauth.yandex.ru/
Content-type: application/x-www-form-urlencoded
Content-Length: <длина тела запроса>
[Authorization: Basic <закодированная строка client_id:client_secret>]

 & access_token=<отзываемый токен>
[& client_id=<идентификатор приложения>]
[& client_secret=<секретный ключ>]
```

#|
|| **Параметр** | **Описание** ||
|| **Обязательный параметр** ||
|| `access_token` | OAuth-токен, который нужно отозвать. ||
|| **Дополнительные параметры** ||
|| `client_id` | Идентификатор приложения. Доступен в [свойствах приложения](https://yandex.com/dev/id/doc/ru/register-client.md#app-params). Чтобы открыть свойства, перейдите в [Яндекс OAuth](https://oauth.yandex.ru/) и нажмите на название приложения.

Параметр обязателен, если в запросе не был указан [заголовок Authorization](#app-auth).
 ||
|| `client_secret` | Секретный ключ. Доступен в [свойствах приложения](https://yandex.com/dev/id/doc/ru/register-client.md#app-params). Чтобы открыть свойства, перейдите в [Яндекс OAuth](https://oauth.yandex.ru/) и нажмите на название приложения.

Параметр обязателен, если в запросе не был указан [заголовок Authorization](#app-auth).
 ||
|#

### Формат ответа {#response}

Яндекс OAuth возвращает ответ в JSON-документе.

{% list tabs %}

- Запрос выполнен успешно

  Если токен успешно отозван или уже был недействителен, возвращается ответ с HTTP-кодом 200 и телом:

  ```json
  {
    "status": "ok"
  }
  ```

- Запрос выполнен с ошибкой

   Если запрос выполнить не удалось, то ответ возвращается с HTTP-кодом ошибки и ее описанием:

   ```json
   {
     "error_description": "Client not found",
     "error": "invalid_client"
   }
   ```

   #|
   || **Параметр** | **Описание** ||
   || `error_description` | Описание ошибки на естественном языке. ||
   || `error` | [Код ошибки](#error-table). ||
   |#

   #### Поддерживаемые коды ошибок {#error-table}

   #|
   || **HTTP-код ответа** | **Код ошибки** | **Описание** ||
   || 400 | `invalid_request` | Неверный формат запроса (например, не указан обязательный параметр). ||
   || 400 | `invalid_grant` | Переданный токен не принадлежит указанному приложению. ||
   || 400 или 401 | `invalid_client` | Возвращается в следующих случаях:
   * Приложение с указанным идентификатором не найдено или заблокировано.
   * Передан неверный пароль для заданного идентификатора приложения.

   HTTP-код ответа 401 возвращается, если идентификатор и секретный ключ были переданы в заголовке `Authorization`. В противном случае возвращается HTTP-код 400. ||
   || 400 | `unsupported_token_type` | Токен не может быть отозван, так как при запросе этого токена не был указан идентификатор устройства (параметр `device_id`).

   Если токен нельзя отозвать, его можно просто удалить из локального хранилища, чтобы приложение потеряло доступ к данным пользователя. ||
   |#

{% endlist %}
