Authorization Code Flow для получения ключа доступа сообщества
Используйте Authorization Code Flow для вызова методов API ВКонтакте с серверной части вашего приложения (например, из PHP). Ключ доступа, полученный таким способом, не привязан к IP-адресу.
Получение списка администрируемых сообществ
Получить ключ доступа сообщества через OAuth может только его администратор. Чтобы получить ключи доступа сразу для всех или нескольких сообществ пользователя, мы рекомендуем добавить этот дополнительный шаг в процесс авторизации.
Получите ключ доступа пользователя (для работы с клиента или для работы с сервера) с правами scope
= groups
и сделайте запрос к методу groups.get с параметром filter
= admin
, чтобы получить список идентификаторов администрируемых сообществ.
Затем используйте все полученные значения или их часть в качестве параметра group_ids
.
Открытие диалога авторизации
Необходимо перенаправить браузер пользователя по адресу
https://oauth.vk.com/authorize
, передав следующие параметры:
- •
client_id
(обязательный) — идентификатор вашего приложения. - •
redirect_uri
(обязательный) — адрес, на который будет переданcode
(домен указанного адреса должен соответствовать основному домену в настройках приложения и перечисленным значениям в списке доверенныхredirect uri
— адреса сравниваются вплоть доpath
-части). - •
group_ids
(обязательный) — идентификаторы сообществ, для которых необходимо получить ключ доступа. Параметр должен представлять собой строку, содержащую значения без знака «минус», разделенные запятой. - •
display
— Указывает тип отображения страницы авторизации. Поддерживаются следующие варианты:- •
page
— форма авторизации в отдельном окне; - •
popup
— всплывающее окно; - •
mobile
— авторизация для мобильных устройств (без использования Javascript)
- •
- •
scope
— битовая маска настроек доступа приложения, которые необходимо проверить при авторизации и запросить отсутствующие. - •
response_type
— тип ответа, который вы хотите получить. Укажитеcode
. - •
- •
state
— произвольная строка, которая будет возвращена вместе с результатом авторизации.
Пример запроса:
https://oauth.vk.com/authorize?client_id=1&display=page&redirect_uri=http://example.com/callback&group_ids=123456,654321&scope=messages&response_type=code&v=5.131
Если пользователь не вошел на сайт, то в диалоговом окне ему будет предложено ввести свой логин и пароль.
Разрешение прав доступа
После успешного входа на сайт пользователю будет предложено авторизовать приложение, разрешив доступ к необходимым настройкам, запрошенным при помощи параметра scope
. Полный список настроек доступен в разделе прав доступа приложений.
Сейчас для ключей доступа сообщества приложение любого типа может запрашивать права manage
,messages
,photos
,docs
. Методы, доступные с ключом доступа сообщества, помечены в общем списке специальным значком.
Получение 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
В результате выполнения данного запроса ваш сервер получит следующий JSON:
{
"access_token_123456": "533bacf01e11f55b536a565b57531ac114461ae8736d6506a3",
"access_token_654321": "a740d2bfe91caaa6eab794e1168da38cdaedc93c92f233638f",
"groups": [
{
"group_id": 123456,
"access_token": "533bacf01e11f55b536a565b57531ac114461ae8736d6506a3"
},
{
"group_id": 654321,
"access_token": "a740d2bfe91caaa6eab794e1168da38cdaedc93c92f233638f"
}
]
"expires_in": 0
}
В поле groups
возвращается массив объектов с полями group_id
(integer
) — идентификатор сообщества и access_token
(string
) — ключ доступа сообщества.
Старые поля access_token
использовать не рекомендуется, они будут упразднены в будущих версиях API.
В случае ошибки будут переданы параметры error
и error_description
.
{
"error": "invalid_grant",
"error_description": "Code is expired."
}