ВебмастерМетрикаВиджетыРекламная сетьДиректПоиск для сайтаAPI
Войти

В формате PDF

Получение Fimp-токена

На уровне сетевого обмена процедура получения Fimp-токена состоит из двух этапов:

  1. Приложение запрашивает у сервера публичный RSA-ключ. В ответ сервер возвращает ключ.
  2. Приложение отправляет серверу зашифрованную RSA-ключом строку с логином и паролем пользователя. Сервер возвращает авторизационный токен.

Взаимодействие клиентского приложения и сервера на стадии получения Fimp-токена представлено на рисунке:

Клиентское приложение должно выполнить следующие действия:

  1. Запросить у пользователя его логин и пароль.
  2. Запросить у сервера публичный RSA-ключ.
  3. Зашифровать пару логин-пароль полученным RSA-ключом.
  4. Обменять зашифрованные логин-пароль на авторизационный токен.

Получение публичного RSA-ключа

Для получения публичного RSA-ключа необходимо отправить GET-запрос по адресу

http://auth.mobile.yandex.ru/yamrsa/key/.

В случае успеха сервер вернет 200 OK и XML-документ, содержащий корневой элемент response и вложенные элементы:

  • key

    Публичный RSA-ключ для шифрования регистрационных данных.

  • request_id

    Идентификатор авторизационной сессии.

Пример

GET HTTP/1.1 http://auth.mobile.yandex.ru/yamrsa/key/

Ответ сервера:

200 OK
Content-Type: application/xml

<?xml version="1.0"?>
<response>
   <key>
BFC949E4C7ADCC6F179226D574869CBF44D6220DA37C054C64CE48D4BAA36B039D8206E45E4576BFDB1D3B40D958FF0894F6541717824FDEBCEDD27C4BE1F057#10001
   </key>
   <request_id>42535f65d2694228b429f53709fbd743</request_id>
</response>

Шифрование логина и пароля с помощью RSA-ключа

С помощью RSA-ключа нужно зашифровать строку с логином и паролем "<credentials login="{логин}" password="{пароль}"/>". Шифровать необходимо всю строку целиком (а не по отдельности логин и пароль). После шифрования полученные данные нужно закодировать в base64.

Внимание!
Cервис выдачи авторизационных токенов поддерживает только нестандартный вариант RSA-шифрация, поэтому от клиентов требуется использование специальной библиотеки шифрования. Исходные тексты варианта библиотеки для языка С/С++ доступны по адресу http://download.yandex.ru/api-fotki/c-yamrsa.tar.gz.

Пример

Для пользователя alekna с паролем «123456» формируем строку credentials:

<credentials login="alekna" password="123456"/>

Эту строку шифруем с помощью RSA-ключа и затем кодируем в base64. На выходе получается строка:

LwBAAAgbGOm18LL5drSQwemI9sGvU0vT2m1NygMSMLyuhQ3hN8lE6CA6C+EVOZCFvDJp9BNUNmi5G/0tlElN9QMB13g=

Получение токена

Для получения токена необходимо обменять зашифрованную и закодированную в base64 строку credentials (см. Шифрование логина и пароля с помощью RSA-ключа) на авторизационный токен.

Для этого нужно выполнить POST-запрос по адресу http://auth.mobile.yandex.ru/yamrsa/token/ с параметрами:

  • request_id - идентификатор авторизационной сессии, полученный на первом этапе (см. Получение публичного RSA-ключа);
  • credentials - строка с логином и паролем пользователя вида "<credentials login="{login}" password="{пароль}"/>", зашифрованная с помощью полученного RSA-ключа и затем закодированная base64 (была получена на предыдущем этапе).

Данный POST-запрос можно выполнить в двух форматах:

  • в формате x-www-form-urlencoded;
  • в формате multipart/form-data.

Внимание!
При отправки запроса в формате x-www-form-urlencoded строку credentials после шифрования и кодирования в base64 необходимо еще URL-кодировать.

Пример

Запрос для получения токена в формате x-www-form-urlencoded:

POST /yamrsa/token/ HTTP/1.1
Host: auth.mobile.yandex.ru
Content-Length:  176
Content-Type: application/x-www-form-urlencoded

request_id=42535f65d2694228b429f53709fbd743&credentials=LwBAAAgbGOm18LL5drSQwemI9sGvU0vT2m1NygMSMLyuhQ3hN8lE6CA6C%2BEVOZCFvDJp9BNU
Nmi5G%2F0tlElN9QMB13g%3D

Примечание
В данном примере строка credentials была разбита на две строки для удобства восприятия.

Пример

В формате multipart/form-data POST-запрос на получение токена имеет вид:

POST /yamrsa/token/ HTTP/1.1
Host: auth.mobile.yandex.ru
Content-Length:  176
Content-Type: multipart/form-data;  boundary=fskDkh42dSCHrebbl+eQ

--fskDkh42dSCHrebbl+eQ
Content-Disposition: form-data;  name="request_id"

42535f65d2694228b429f53709fbd743
--fskDkh42dSCHrebbl+eQ
Content-Disposition: form-data; name="credentials"

LwBAAAgbGOm18LL5drSQwemI9sGvU0vT2m1NygMSMLyuhQ3hN8lE6CA6C+EVOZCFvDJp9BNUNmi5G/0tlElN9QMB13g=

В случае успеха сервер возвращает 200 OK и авторизационный токен:

HTTP/1.1 200 OK
Content-Type: application/xml

<response>
  <token>e78cf1a0ebbb19...</token>
</response>

Возможные ошибки

В случае ошибки при попытке авторизации сервер возвращает XML-документ, где code - код внутренней ошибки сервера.

<?xml version="1.0"?>
<response>
  <error code={code}>{Текстовое описание}</error>
</response>

  • 403 Forbidden

    Текстовое описание: Invalid credentials. Authorization failed. Указана неверная пара логин-пароль.

  • 400 Bad Request

    В теле ответа:

    • Invalid parameters

      Отсутствует один из параметров request_id или credentials.

    • No session or session expired

      В запросе нет идентификатора сессии (request_id) или указанная сессия просрочена.

    • Malformed credentials data

      Строка с логином и паролем (параметр credentials) сформирована неверно.

    • Missing some credential data

      Не указан логин или пароль.