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

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

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

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

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

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

    • изменил пароль;

    • включил или выключил двухфакторную аутентификацию;

    • успешно восстановил доступ к аккаунту;

    • перешел по ссылке Выйти на всех компьютерах в Яндекс ID или на каком-то другом сервисе.

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

Приложение может отзывать 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).

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