https://oauth.mail.ru/login?response_type=code
& client_id=<идентификатор приложения>
& [scope=<список доступов>]
& [prompt=<процесс прохождения авторизации>]
& redirect_uri=<адрес перенаправления>
& state=<произвольная строка состояния>
& code_challenge=<преобразованный code_verifier>
& code_challenge_method=<метод преобразования>| Параметр | Значение | Описание |
|---|---|---|
| client_id | ID созданного приложения | |
| redirect_uri | Адрес, на который сервер авторизации перенаправляет пользователя после успешной авторизации. Должен в точности совпадать с тем адресом, который был указан в приложении, включая схему http или https и символ / в конце, например https://yourproject.ru/oauth/callback/ | |
| scope | openid profile mail.imap | Запрашиваемые права приложения. Допустимо указание нескольких scope через пробел. Возможные значения:
|
| state | string | Длина должна быть 256 бит. Nonce, рекомендуем взять из криптостойкого генератора псевдослучайных последовательностей, например SecureRandom в Android. Сервер авторизации добавляет этот параметр с указанным значением к адресу redirect_uri, куда перенаправляется пользователь |
| code_challenge | Значение code_verifier, преобразованное с помощью code_challenge_method и закодированное в base64 RFC-7636 Code Challenge. code_verifier представляет собой случайно сгенерированную строку, состоящую из символов: a-z, A-Z, 0-9, _, -, длиной от 43 до 128 символов. code_challenge применяется при использовании расширения PKCE для защиты передаваемых данных. Генерируется приложением для последующей проверки, что запрос токена поступает от того же приложения, которое запросило авторизацию | |
| code_challenge_method | Метод преобразования code_verifier в code_challenge. Принимает значение S256 | |
| prompt | Опциональный параметр. Позволяет изменить способ прохождения авторизации. Возможные значения:
|
GET https://<адрес перенаправления>?state=<произвольная строка состояния>&code=<код подтверждения>| Параметр | Описание |
|---|---|
| code | Временный код со сроком жизни 5 минут, полученный после авторизации. По этому коду в дальнейшем можно запросить токен доступа access_token |
| state | Соответствует значению, которое указано в параметре state запроса |
curl -X POST --location "https://oauth.mail.ru/token" \
-H "Content-Type: application/x-www-form-urlencoded;" \
-d "grant_type=authorization_code&code=<код подтверждения authorization_code>&code_verifier=<параметр для защиты передаваемых данных>&redirect_uri=<адрес перенаправления>" \
-u "<client_id>:<client_secret>"| Параметр | Значение | Описание |
|---|---|---|
| code | Авторизационный код | |
| grant_type | authorization_code | Тип получения токена (только с сервера) |
| redirect_uri | Адрес, на который сервер авторизации перенаправляет пользователя после успешной авторизации. Должен в точности совпадать с тем адресом, который был указан в приложении, включая схему http или https и символ / в конце, например https://yourproject.ru/oauth/callback/ | |
| code_verifier | Параметр, который обеспечивает защиту передаваемых данных. Параметр применяется при PKCE. Случайно сгенерированная строка, новая на каждый запрос авторизации. Может состоять из следующих символов: a-z, A-Z, 0-9, _, -. Длина от 43 до 128 символов. На основании строки формируется code_challenge: сервер преобразует code_verifier методом code_challenge_method, полученным в запросе на отправку кода подтверждения, и сравнивает результат с code_challenge из того же запроса. Параметр обязателен для обмена кода на токен |
| Параметр | Описание |
|---|---|
| access_token | Токен доступа |
| refresh_token | Токен обновления, который можно использовать для получения нового токена доступа. Действителен 30 суток после последнего получения access_token |
| expires_in | Время действия токена доступа в секундах |
// HTTP 200 OK
{
"expires_in":3600,
"access_token":"****",
"refresh_token":"****"
}curl -X POST --location "https://oauth.mail.ru/token" \
-H "Content-Type: application/x-www-form-urlencoded;" \
-d "grant_type=refresh_token&refresh_token=<refresh_token>&client_id=<идентификатор приложения>" \
-u "<client_id>:<client_secret>"| Параметр | Значение | Описание |
|---|---|---|
| client_id | ID созданного приложения | |
| grant_type | refresh_token | Тип получения токена |
| refresh_token | Токен обновления, который можно использовать для получения нового токена доступа. Действителен 30 суток после последнего получения access_token. Если срок действия refresh_token истёк и вы хотите получить новый, получите новый код авторизации и новый Access token |
| Параметр | Описание |
|---|---|
| access_token | Токен доступа |
| refresh_token | Новый токен обновления, который можно использовать для получения нового токена доступа. Действителен 30 суток после последнего получения access_token |
| token_type | Тип токена — по умолчанию Bearer |
| expires_in | Время действия токена доступа в секундах |
// HTTP 200 OK
{
"expires_in":3600,
"access_token":"****",
"refresh_token": "****"
}curl -X POST --location "https://oauth.mail.ru/api/v1/oidc/userinfo" \
-H "Authorization: Bearer <access_token>"// HTTP 200 OK
{
"sub": "...",
"name": "Алексей Иванов",
"given_name": "Алексей",
"family_name": "Иванов",
"nickname": "alex",
"picture": "https://...",
"gender": "male",
"birthdate": "2006-01-02",
"locale": "ru_RU",
"email": "alex@ivanov.ru",
"email_verified": true
}| Параметр | Описание |
|---|---|
| sub | Идентификатор учетной записи |
| name | Имя и фамилия |
| given_name | Имя |
| family_name | Фамилия |
| nickname | Псевдоним |
| picture | Аватар пользователя |
| gender | Пол. Возможные значения:
|
| locale | Язык и регион |
| Почтовый адрес | |
| email_verified | Признак подтвержденной учетной записи. Возможные значения:
|
curl -X POST --location "https://oauth.mail.ru/api/v1/oauth2/token/introspect" \
-H "Content-Type: application/x-www-form-urlencoded;" \
-d "token_type_hint=<тип инспектируемого токена>&token=<токен>" \
-u "<client_id>:<client_secret>"| Параметр | Описание |
|---|---|
| token_type_hint | Тип инспектируемого токена. Возможные значения:
|
| token | Инспектируемый токен |
| Параметр | Описание |
|---|---|
| active | Признак активности токена. Возможные значения:
|
| scope | Список прав доступа, которые необходимы приложению. Значения в списке разделяются пробелами, например: email mail.imap . Если список не указан, то он будет взят из пришедшего Refresh token |
| client_id | ID созданного приложения |
| username | Email учетной записи |
| token_type | Тип токена — по умолчанию Bearer |
| exp | Cрок действия токена в секундах |
| iat | Время выдачи токена в формате Unix Timestamp |
| sub | Идентификатор учетной записи |
// HTTP 200 OK
{
"active": true,
"scope": "userinfo",
"client_id": "test_client_id",
"username": "alex@ivanov.ru",
"token_type": "Bearer",
"exp": 3599,
"iat": 1762846819,
"sub": "..."
}// HTTP 200 OK
{ "active": false }{
"error": "<ошибка с одним из значений ниже>",
"error_description": "<описание ошибки. Передается в виде строки>",
}// HTTP 400 BadRequest
{
"error": "invalid_request",
"error_description": "The request is missing a required parameter,\nincludes an invalid parameter value, includes a parameter more than once, or is otherwise malformed"
}$ perl -Mstrict -MMIME::Base64 -e 'print encode_base64("user=<email>\001auth=Bearer 0d5c0dfabf227a018483be5424febfe07957295437363a30\001\001");'
dXNlcj1hbHRkZXZAbWFpbC5ydQFhdXRoPUJlYXJlciAwZDVjMGRmYWJmMmY3YTAxODQ4M2JlNTQyNGZlYmZlMDc5NTcyOTE0MzczNjM4MzAB. capability
* CAPABILITY IMAP4rev1 ID XLIST UIDPLUS UNSELECT MOVE AUTH=PLAIN AUTH=XOAUTH2
. OK CAPABILITY completed
. authenticate xoauth2 dXNlcj1hbHRkZXZAbWFpbC5ydQFhdXRoPUJlYXJlciAwZDVjMGRmYWJmMmY3YTAxODQ4M2JlNTQyNGZlYmZlMDc5NTcyOTE0MzczNjM4MzAB
* CAPABILITY IMAP4rev1 ID XLIST UIDPLUS UNSELECT MOVE
. OK Authentication successful. authenticate xoauth2 YmxhaGJsYWhibGFo
. NO Internal error. authenticate xoauth2 dXNlcj10ZXN0QG1haWwucnUBYXV0aD1CZWFyZXIgNTkwNjljZGVjNTI5N2VmODg1YmMyODIwNWJjOTQwNmI3OTU3MjkxNDM3MzYzODMxAQ==
. NO [AUTHENTICATIONFAILED] Authentication failed$ perl -Mstrict -MMIME::Base64 -e 'print encode_base64("user=<email>\001auth=Bearer 0d5c0dfabf227a018483be5424febfe07957295437363a30\001\001");'
dXNlcj1hbHRkZXZAbWFpbC5ydQFhdXRoPUJlYXJlciAwZDVjMGRmYWJmMmY3YTAxODQ4M2JlNTQyNGZlYmZlMDc5NTcyOTE0MzczNjM4MzAB$ openssl s_client -connect smtp.mail.ru:465
...
220 smtp53.i.mail.ru ESMTP ready
C: EHLO client.example.com
S: 250-smtp53.i.mail.ru
S: 250-SIZE 73400320
S: 250-8BITMIME
S: 250-PIPELINING
S: 250 AUTH PLAIN LOGIN XOAUTH2
C: AUTH XOAUTH2 dXNlcj1hbHRkZXZAbWFpbC5ydQFhdXRoPUJlYXJlciAwZDVjMGRmYWJmMmY3YTAxODQ4M2JlNTQyNGZlYmZlMDc5NTcyOTE0MzczNjM4MzAB
S: 235 Authentication succeededC: AUTH XOAUTH2 dXNlc
S: 501 Invalid base64 data
или
S: 500 5.5.1 Invalid commandC: AUTH XOAUTH2 dXNlcj08ZW1haWw+XDAwMWF1dGg9QmVhcmVyIDxhY2Nlc3NfdG9rZW4+XDAwMVww111111111111MDE=
S: 535 Incorrect authentication data: auth failed for <email>