Подключение OAuth авторизации

Протокол OAuth 2.0 предназначен для выдачи одному сервису (партнерской игре) права на доступ к ресурсам пользователя на другом сервисе (games.mail.ru). При этом нет необходимости в создании и хранении дополнительных паролей. Подробнее о протоколе в RFC 6749.

Получение authorization_code

Получение OAuth авторизации начинается с отправление браузера клиента на следующий адрес:

https://games.mail.ru/app/[GMRID]/oauth/authorize?redirect_uri=https%3A%2F%2Fexample.com%2Frand&response_type=code
  • [GMRID] - id приложения, является частью PATH в URL
  • response_type - значение парметра должно быть code
  • redirect_uri - адрес на который будет отправлен пользователь в случае успеха или не удачи при авторизации. Рекомендует добавлять в redirect_uri рандомную составляющую.

В случае удачной авторизации и выдачи доступа для партнерского проекта пользователь будет отправлен на URL:

https://example.com/rand?code=ohxai0joh1shif8oNiengix3phahSaem

В случае неудачи клиент вернется с ошибкой:

https://example.com/rand?error=invalid_request
https://example.com/rand?error=unauthorized_client
https://example.com/rand?error=access_denied

Подробнее об ошибках в RFC 6749.

Обмен authorization_code на access_token

После получения от клиента authorization code необходимо обменять его на пару access и refresh токеновов. Для этого необходиом сделать server-server вызов API:

POST /app/[GMRID]/oauth/token HTTP/1.1
Host: games.mail.ru
Content-Type: application/x-www-form-urlencoded

grant_type=authorization_code&client_secret=gX1fBat3bV&
code=ohxai0joh1shif8oNiengix3phahSaem&
redirect_uri=https%3A%2F%2Fexample.com%2Frand
  • [GMRID] - id приложения, является частью PATH в URL
  • grant_type - значение парметра должно быть authorization_code
  • code - authorization code, полученный от клиента
  • client_secret - secret партнера. Партнер может узнать его в кабинете разработчика, на странице игры, на вкладке "Системные свойства". Поле "Секрет для api.games.mail.ru".
  • redirect_uri - в точности тот адрес который был отправлен в параметре redirect_uri для получения authorization code клиентом

В случае успеха будет отправлен ответ:

{
    "access_token":"ohxai0joh1shif8oNiengix3phahSaem",
    "token_type":"bearer",
    "expires_in":2592000,
    "refresh_token":"iet1AiSheatiemahzie4eehidahbohgh",
}

Через время указанное в параметре expires_in access_token будет деактивирован для дальнейшей работы потребуется его обновление.

Обновление access_token

POST /app/[GMRID]/oauth/token HTTP/1.1
Host: games.mail.ru
Content-Type: application/x-www-form-urlencoded

grant_type=refresh_token&refresh_token=iet1AiSheatiemahzie4eehidahbohgh
  • [GMRID] - id приложения, является частью PATH в URL
  • grant_type - значение парметра должно быть refresh_token
  • refresh_token - token полученый при обмене code на access_token

В случае успеха будет отправлен ответ:

{
    "access_token":"ohkohng1Aethielahr0niwai8oonguu3",
    "token_type":"bearer",
    "expires_in":2592000,
    "refresh_token":"iet1AiSheatiemahzie4eehidahbohgh",
}

Получение информации о пользователи по access_token

GET /app/[GMRID]/oauth/info?access_token=ohkohng1Aethielahr0niwai8oonguu3 HTTP/1.1
Host: games.mail.ru
  • [GMRID] - id приложения, является частью PATH в URL
  • access_token - token полученый при обмене code на access_token

В случае успеха будет отправлен ответ:

{
    "status": "ok",
    "uid": "1252352"
}