Authorization Code Flow для получения ключа доступа пользователя
Используйте Authorization Code Flow для вызова методов API ВКонтакте с серверной части вашего приложения (например, из PHP). Ключ доступа, полученный таким способом, не привязан к IP-адресу, но набор прав, которые может получить приложение, ограничен из соображений безопасности.
Открытие диалога авторизации
Необходимо перенаправить браузер пользователя по адресу
https://oauth.vk.com/authorize
, передав следующие параметры:
- •
client_id
(обязательный) — идентификатор вашего приложения. - •
redirect_uri
(обязательный) — адрес, на который будет переданcode
(домен указанного адреса должен соответствовать основному домену в настройках приложения и перечисленным значениям в списке доверенныхredirect uri
, адреса сравниваются вплоть доpath
-части). - •
display
— указывает тип отображения страницы авторизации. Поддерживаются следующие варианты:- •
page
— форма авторизации в отдельном окне; - •
popup
— всплывающее окно; - •
mobile
— авторизация для мобильных устройств (без использования Javascript) Если пользователь авторизуется с мобильного устройства, будет использован типmobile
.
- •
- •
scope
– битовая маска настроек доступа приложения, которые необходимо проверить при авторизации пользователя и запросить отсутствующие. - •
response_type
— тип ответа, который вы хотите получить (укажитеcode
). - •
state
— произвольная строка, которая будет возвращена вместе с результатом авторизации.
Пример запроса:
https://oauth.vk.com/authorize?client_id=1&display=page&redirect_uri=http://example.com/callback&scope=friends&response_type=code&v=5.131
Если пользователь не вошел на сайт, то в диалоговом окне ему будет предложено ввести свой логин и пароль.
Разрешение прав доступа
После успешного входа на сайт пользователю будет предложено авторизовать приложение, разрешив доступ к необходимым настройкам, запрошенным при помощи параметра scope
. Полный список настроек доступен в разделе прав доступа приложений.
Обратите внимание, что некоторые права доступа пользователя из списка (например, messages
) могут быть запрошены только Standalone-приложением — что означает необходимость использования Implicit Flow для запроса таких прав.
Получение code
После успешной авторизации приложения браузер пользователя будет перенаправлен по адресу redirect_uri
, указанному при открытии диалога авторизации. При этом код для получения ключа доступа code
будет передан как GET
-параметр:
REDIRECT_URI?code=7a6fa4dff77a228eeda56603b8f53806c883f011c40b72630bb50df056f6479e52a
Параметр code
может быть использован в течение 1 часа для получения ключа доступа к API access_token
с вашего сервера.
В случае возникновения ошибки браузер пользователя будет перенаправлен с кодом и описанием ошибки:
REDIRECT_URI?error=invalid_request&error_description=Invalid+display+parameter
Получение access_token
Для получения access_token
необходимо выполнить запрос с вашего сервера на https://oauth.vk.com/access_token, передав следующие параметры:
- •
client_id
(обязательный) — идентификатор вашего приложения. - •
client_secret
(обязательный) — защищенный ключ вашего приложения (указан в настройках приложения). - •
redirect_uri
(обязательный) — URL, который использовался при полученииcode
на первом этапе авторизации. Должен быть аналогичен переданному при авторизации. - •
code
(обязательный) — временный код, полученный после прохождения авторизации.
Пример запроса:
https://oauth.vk.com/access_token?client_id=1&client_secret=H2Pk8htyFD8024mZaPHm&redirect_uri=http://mysite.ru&code=7a6fa4dff77a228eeda56603b8f53806c883f011c40b72630bb50df056f6479e52a
В результате выполнения данного запроса ваш сервер получит вновь созданный access_token
. Вместе с access_token
серверу возвращается время жизни ключа expires_in
в секундах. expires_in
содержит 0
, если токен бессрочный (при использовании scope
= offline
). Процедуру авторизации приложения необходимо повторять в случае истечения срока действия access_token
, смены пользователем своего логина или пароля или удаления приложения из настроек.
{
"access_token": "533bacf01e11f55b536a565b57531ac114461ae8736d6506a3",
"expires_in": 43200,
"user_id": 66748
}
Если у пользователя указан email, а приложением были запрошены соответствующие права, сервер также вернет email
пользователя.
В случае ошибки будут переданы параметры error
и error_description
.
{
"error": "invalid_grant",
"error_description": "Code is expired."
}