Почему возникает ошибка при вызове с валидным токеном методов API board.createComment, wall.post и других из серверного приложения?
Работаю над серверным приложением на node.js для публикации материалов. Зарегистрировал и настроил Standalone приложение.
Использую Authorization Flow для получения токена доступа, указываю права "wall, groups, offline", токен получаю успешно, проверял его с другими методами (в частности при вызове хранимой процедуры) — с ним все в порядке.
При вызове некоторых методов для публикации материалов (board.createComment, wall.post) API ВК возвращает сообщение с ошибкой 15 (нет доступа).
Пробовал обойти вызов метода напрямую — написал для приложения хранимую процедуру, которая вызывает метод board.createComment. При вызове метода из формы редактирования процедуры все проходит успешно, когда же пытаюсь вызвать процедуру через http-запрос — снова получаю ошибку.
В группе я администратор, соответственно доступ в полной версии сайта у меня есть. Вручную могу добавить комментарий, разместить пост и т.д. Вызов метода через форму внизу страницы описания метода также проходит успешно.
Токен в порядке — вызов других методов а также метода вызова хранимой процедуры (непосредственно вызов, без публикации) происходит успешно.
Тех. поддержка ВК ответила одним предложением из документации, что де токен надо получать через Implicit Flow. Пробовал получить токен и через Implicit Flow — симптомы те же. К тому же, насколько я понимаю, права у них если не одни и те же, то у Authorization Flow должны быть пошире.
Ошибка в моем случае была в параметре redirect_uri, который нужно указать в запросе на получение токена, не заметил одной особенности которая связана с этим параметром. Если использовать redirect_uri отличный от такового по умолчанию (https://oauth.vk.com/blank.html) приложение теряет доступ к использованию методов, помеченных как доступных для Standalone приложения.
Выдержка из описания получения токена по Implicit flow:
Если Вы разрабатываете веб-приложение и хотите работать с API из Javascript, в redirect_uri необходимо указать адрес страницы на Вашем сайте. В целях безопасности, этот адрес также должен быть указан в настройках Вашего приложения (поля «Адрес сайта», «Базовый домен» и «Доверенный Redirect URI»). Обратите внимание, Вы не сможете работать с методами, которые помечены как доступные только для Standalone-приложений.
Попробуйте токен получить прямой авторищацией с сервера (если нет 2fa на вк аккауете). А вообще вк СПП правы. Implicit имеет больше прав чем Autirization.
P.S. если серверу нужен один аккаунт, то получите ключ в браузере (без rederict url), а потом передайте его серверу.
Kcid13: 1. Implicit flow — самый короткий и простой вариант. Ключ возвращается на устройство пользователя, где был открыт диалог авторизации (в виде дополнительного параметра URL). Такой ключ может быть использован только для запросов непосредственно с устройства пользователя (например, для выполнения вызовов из Javascript на веб-сайте или из мобильного приложения).
2. Authorization code flow — двухэтапный вариант с дополнительной аутентификацией Вашего сервера. Ключ доступа возвращается непосредственно на сервер и может быть использован, например, для автоматизированных запросов из PHP.
Но большинство методов имеют такую метку Этот метод можно вызвать с ключом доступа пользователя, полученным в Standalone-приложении через Implicit Flow. Требуются права доступа: wall.