VK API ошибка в доступе

483
19 апреля 2017, 14:12

Привет. Я создал свое приложение как полагается. И все у меня работает Но только для моего токена. Суть вот в чем: через CURL я посылаю запрос для метода messages.get и он работает отлично. Но стоит использовать другой токен в приложении как на выходе получается следующая картина:

 {"error":{"error_code":17,"error_msg":"Validation required: please open redirect_uri in browser 1056693590","request_params":[{"key":"oauth","value":"1"},{"key":"method","value":"messages.get"},{"key":"user_id","value":"156961900"},{"key":"v","value":"5.37"},{"key":"out","value":"0"},{"key":"count","value":"10"}],"redirect_uri":"https:\/\/m.vk.com\/login?act=security_check&api_hash=ХЭШ"}}

Таким образом, я в ступоре. Ибо на localhost все работает даже с дуругим токеном (по крайней мере вчера работало ха-ха), но на хосте для юзеров кроме меня - нет.

На всякий случай:

  1. Все пользователи добавили себе мое приложение.
  2. Через адресную строку, используя любой зарегестрированный токен, я могу получить результат.
  3. В настройках приложения указаны рабочие base domain, auth url, site address
Answer 1

Согласно документации, есть 3 способа получения получения ключа доступа (access token):

  1. Implicit flow - самый простой (одношаговый) способ, но ключ будет работать только с запросами, отправленными с устройства, с которого была произведена авторизация. Подойдет для десктопных, мобильных или javascipt приложений.
  2. Authorization code flow - двухшаговый способ, более сложный, но полученный access token не будет привязан к ip клиента, запросы можно отправлять с сервера. Есть некоторые ограничения на разрешаемые права, например нельзя получить доступ к messages.
  3. Client credentials flow - авторизация по секретному ключу приложения. Необходимо только для доступа доступа к специальным secure-методам.

В вашем случае нужно использовать 2 метод:

  • Сначала с клиентского устройства идет запрос вида

    https://oauth.vk.com/authorize?client_id=1&  // id приложения
        display=page&  // тип страницы авторизации
        redirect_uri=http://example.com/callback&  // куда производится переход после авторизации
        scope=friends&  // к чему хотим получить доступ
        response_type=code&  // тип ответа, который нам нужен
        v=5.63
    

    После редиректа получаем код, который используем во втором запросе:

    http://REDIRECT_URI#code=XXXXXXXX
    
  • С сервера отправляем запрос вида:

    https://oauth.vk.com/access_token?client_id=1&  // id приложения
        client_secret=H2Pk8htyFD8024mZaPHm&  // Защищенный ключ приложения - смотрим в настройках приложения, там же где и id
        redirect_uri=http://mysite.ru&  // Куда переходим после запроса
        code=XXXXXXXX  // Код, полученный на предыдущем шаге
    

    В результате уже получаем access token, который уже используем в запросах со стороны сервера:

    {"access_token":"YYYYYYYYYYY", "expires_in":43200, "user_id":ZZZZZ} 
    
READ ALSO
Редактирование файла с помощью формы

Редактирование файла с помощью формы

Если 1 раз отредактировать, то всё нормально, но если сразу же повторно отредактировать, то вылазит ошибка, из-за того, что файл уже отредактирован...

266
Qt5 | Переходы между формами

Qt5 | Переходы между формами

Есть два класса, пусть будет Форма 1 и Форма 2, который созданы в Qt desingerЯ хочу их завязать между собой

238
Разбиение кода на функции. С++

Разбиение кода на функции. С++

Есть код программы, которая позволяет ввести динамический массив, а затем 1Упорядочивает элементы массива по возрастанию

258