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

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

  • Доступ был отозван пользователем на странице Доступы к данным. При отзыве OAuth-токена соответствующий refresh-токен отзывается автоматически.

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

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

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

Отзыв токенов в приложении

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

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

При этом для пользователя на странице Доступы к данным ничего не изменится. Токен, выданный приложению, будет считаться активным, пока не будет отозван каким-либо из перечисленных выше способом.

Отзыв токена для устройства

Яндекс OAuth позволяет запросить токен для приложения на конкретном устройстве. Для этого в запросе токена или кода подтверждения следует указать идентификатор устройства и его имя (параметры device_id и device_name описаны в форматах запросов на страницах этого документа). Это имя пользователь сможет увидеть на странице управления доступом в API Яндекс ID. Если указать только идентификатор, без имени, токен будет помечен как выданный для неизвестного устройства.

Внимание

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

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

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

Аутентификация приложения

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

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

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

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

    Authorization: Basic <закодированная строка client_id:client_secret>
    
  • В теле POST-запроса, в параметрах client_id и client_secret. Эти параметры обязательно должны передаваться одновременно.

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

Формат запроса

Запрос следует отправлять по протоколу 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

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

Параметр обязателен, если в запросе не был указан заголовок Authorization.

client_secret

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

Параметр обязателен, если в запросе не был указан заголовок Authorization.

Формат ответа

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

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

{
  "status": "ok"
}

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

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

Параметр

Описание

error_description

Описание ошибки на естественном языке.

error

Код ошибки.

Поддерживаемые коды ошибок

HTTP-код ответа

Код ошибки

Описание

400

invalid_request

Неверный формат запроса (например, не указан обязательный параметр).

400

invalid_grant

Переданный токен не принадлежит указанному приложению.

400 или 401

invalid_client

Возвращается в следующих случаях:

  • Приложение с указанным идентификатором не найдено или заблокировано.
  • Передан неверный пароль для заданного идентификатора приложения.

HTTP-код ответа 401 возвращается, если идентификатор и секретный ключ были переданы в заголовке Authorization. В противном случае возвращается HTTP-код 400.

400

unsupported_token_type

Токен не может быть отозван, так как при запросе этого токена не был указан идентификатор устройства (параметр device_id).

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