Платформа@Mail.Ru предоставляет возможность приложениям авторизовывать пользователей по их логину и паролю на Mail.Ru. Авторизация по логину и паролю сделана для тех приложений, которые по техническим причинам не могут реализовать другие способы авторизации.
Возможность авторизации по логину и паролю подключается модератором для кажого приложения отдельно. Вы можете послать запрос на адрес app@corp.mail.ru с указанием app_id вашего приложения и почему вы не можете использовать стандартную авторизацию для standalone-приложений. Подавляющее большинство приложений под Windows, MacOS, Linux, iOS и Android может использовать авторизацию для standalone-приложений, кроме того, это стандартный способ авторизации во многих социальных сетях. Поэтому мы разрешаем авторизацию по логину и паролю лишь в исключительных случаях. Не рекомендуем начинать разработку авторизации по логину и паролю без получения подтверждения от нас, что такая авторизация будет разрешена.
Авторизация по логину и паролю предназначена только для native приложений. Поэтому перед подачей заявки ваше приложение должно быть размещено в контексте «Внешние приложения». Это можно сделать в закладке «Публикация» настроек приложения.
Для получения сессии приложение должно сделать POST-запрос на адрес https://appsmail.ru/oauth/token. Например:
> POST /oauth/token HTTP/1.1 > Host: appsmail.ru > Content-Type: application/x-www-form-urlencoded > > grant_type=password&client_id=123&client_secret=234& username=test@mail.ru&password=qwerty&scope=widget
В случае, если все параметры указаны правильно, сервер возвращает сессию (access_token) и вспомогательные параметры:
{ "refresh_token":"e3a8a0a432bae164fb164e6c357fc0c6", "expires_in":86400, "x_mailru_vid":"16645288773925549681", "access_token":"1e6db8c123b90797aa745afe160e9e95" }
Сообщения об ошибках содержат параметр error, содержащий код ошибки в соответствии с разделом 4.3.1 спецификации OAuth 2.0.
Приложениям запрещается сохранять пароль пользователя. Для того, чтобы обеспечить повторное получение сессии без запроса пароля, используется механизм refresh_token. При успешной авторизации с помощью логина и пароля пользователя сервер возвращает значение refresh_token, которое можно сохранить на клиенте и использовать при последующих запусках программы вместо логина и пароля для получения новой сессии.
> POST /oauth/token HTTP/1.1 > Host: appsmail.ru > Content-Type: application/x-www-formurlencoded > > grant_type=refresh_token& client_id=123& refresh_token=e3a8a0a432bae164fb164e6c357fc0c6& client_secret=000ff8627d2d79b60ebdaf004f9a68aa < HTTP/1.1 200 OK < Content-Type: application/json < < {"refresh_token":"e3a8a0a432bae164fb164e6c357fc0c6", "expires_in":86400, "x_mailru_vid":"16645288773925549681", "access_token":"1e6db8c123b90797aa745afe160e9e95"}
Как видно из примера, ответ за запрос с использованием refresh_token‘а возвращается такого же вида, как и при авторизации с помощью логина и пароля.