0

Есть Standalone-приложение VK.

Пользователь проводит OAuth-авторизацию для получения access_token по документации.

Процесс авторизации приложения состоит из трёх шагов:

  1. Открытие окна браузера для аутентификации пользователя на сайте ВКонтакте.

  2. Разрешение пользователем доступа к своим данным.

  3. Передача в приложение ключа access_token для доступа к API.

На третьем шаге начинается самое интересное — некоторые пользователи получают токен и всё работает, а некоторые получают error_code 17 (Ошибка при заходе из подозрительного места).

Пользователь выполняет процедуру проверки, описанную в документации, и получает следующего формата URL:

https://oauth.vk.com/blank.html#success=1&access_token={НОВЫЙ ТОКЕН ПОЛЬЗОВАТЕЛЯ}&user_id={ИДЕНТИФИКАТОР ПОЛЬЗОВАТЕЛЯ}

Теперь пользователь пытается выполнить запрос к API уже с новым токеном и опять получает error_code 17.

Пользователи выполняют процедуру проверки несколько раз, так в итоге и не получив токен.

Может, кто сталкивался с такой проблемой или есть какие-либо идеи?

2
  • 1
    Приложение авторизуется и выполняет запрос с одного устройства и одного ip? Похожая ситуация была, когда имитировал standalone и токен пытался использовать с сервера. Хостинг в Москве. Для пользователей из Москвы всё было ок, для других регионов – облом, как у вас.
    – Sergiks
    21 ноя 2014 в 20:03
  • @Sergiks Да, ситуация аналогичная Вашей: хостинг в Румынии, сам нахожусь в Украине, все украинские пользователи - ок, русские пользователи - требует валидацию. Как Вы решили данную проблему? 22 ноя 2014 в 10:10

4 ответа 4

2

Костыль А: указывать старую версию API (<3) в параметрах запроса. В таком варианте удавалось обходить капчу и другие ограничения по безопасности. Но это до тех пор, пока не отключат поддержку этих старых версий;

Вариант Б: не нарушать правила ВК и решать задачи методами, доступными для приложений типа Site/iFrame;

Вариант В: делегирование. Через Standalone работать от имени своих нескольких аккаунтов, авторизованных прямо с сервера, а клиенты пусть дают этим аккаунтам разрешения – админить их группы, рекламный кабинет и пр.

2
  • @Sergiks Варианты А и Б отпадают. А вот вариант В не доконца понял. Объясните на примере, если пользователю нужно поставить лайк, к примеру. Как он может разрешить это действие моему аккаунту? 22 ноя 2014 в 10:26
  • Лайк – не сможет. Только standalone от имени того, что ставит лайк. Описанный вариант годится для автомодерации групп, например. Вы, как владелец группы, добавляете мой «специальный» аккаунт как Менеджера группы. А этот спец. аккаунт у меня дал токен standalone приложению, которое от его имени следит, чтобы не было спама в комментах, чистит, банит. Так, напр., работает МДК'шный анбан.
    – Sergiks
    22 ноя 2014 в 10:40
0

Пользовался этим мануалом: http://ruseller.com/lessons.php?id=1659&rub=37

1
  • @shilgen это не подходит, потому что у меня standalone приложение. 22 ноя 2014 в 10:08
0

Столкнулся с такой же проблемой. Решение - при всех запросах использовать один и тоже ip и User Agent. Если получение токена, запрос, вернувший 17ю ошибку и проверка верификации производились с разных ip или User Agent - будет возвращать тот же токен. Необходимо полное совпадение на всех этапах.

0

Для авторизации на стороннем сервере можно использовать этот скрипт - https://github.com/Yashko/vk-validation-node

1

Ваш ответ

By clicking “Отправить ответ”, you agree to our terms of service and acknowledge you have read our privacy policy.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками или задайте свой вопрос.