Авторизация в VK API с помощью логина и пароля
2014-08-15 в 10:28, admin , рубрики: python3, vk api
Давно хотелось написать какое-нибудь приложение, используя VK API. Решено было написать некий каркас, добавляя плагины к которому можно было бы реализовать какие-то мелкие задачи, которые нужны в данный момент: от скачивания музыки до банального поддержания аккаунта онлайн. Запускать данное творение планировалось как на сервере, так и на ПК. С проблемами, вставшими на моем пути во время разработки, включая озвученную в заголовке, я и хотел бы вас познакомить.
Шаг 0. Изучение документации
Итак, задача поставлена, теперь необходимо изучить платформу VK API. Ознакомившись с методами было замечено, что многие из них требуют получения access_token, или, проще говоря, авторизации пользователя.
- OAuth-авторизация
- Прямая авторизация
- Авторизация с использованием официального приложения (предоставляется в SDK)
Теперь подробнее о методах в порядке возрастания их полезности:
Авторизация с использованием официального приложения
Приложение состыковывается с официальным приложением для Android или iOS, которое дает ему интерфейс для взаимодействия с API.
Собственно, без комментариев, способ совсем для других платформ и задач.
OAuth-авторизация
Необходимо открыть страницу авторизации в браузере, где пользователь, если он еще не авторизован на сайте, введет свой логин и пароль и разрешит доступ к его аккаунту.
Этот способ не понравился сразу по двум причинам: во-первых, токен таким образом необходимо получать каждые 24 часа, во-вторых, для его получения нужно каждый раз заходить на сервер, открывать lynx, авторизовываться и разрешать доступ. Не очень удобно. Есть, конечно, такой вариант, но всё-таки решено было поискать что-то другое.
Прямая авторизация
Передача логина и пароля непосредственно GET-запросом на определенный URL. Токен в итоге получается бессрочный и без привязки по IP.
Идеально подходящий, казалось бы, способ, если бы не одно «но»:
Внимание! Доступ к этому типу авторизации может быть получен только после предварительного согласования с администрацией ВКонтакте.
Для подачи заявки на получение доступа Вам необходимо обратиться в службу поддержки по адресу vk.com/support, указав ID Вашего приложения.
В настоящий момент эта возможность предоставляется только для платформ, не поддерживающих стандартную авторизацию. В заявке необходимо кратко описать функционал приложения.
Объяснять, что пишу просто каркас для любой своей будущей идеи, думаю, было бессмысленно, поэтому пришлось искать какие-то обходные пути.
Шаг 1. Обходные пути
Расстроившись тем фактом, что простым смертным получить доступ к прямой авторизации достаточно сложно, я уже чуть было не похоронил свою идею.
Однако, в один прекрасный день, во время чтения ленты новостей в официальном приложении VK на планшете под управлением Windows 8, в голову пришла мысль: а почему бы не взять access_token из этого приложения, он ведь бессрочный и без привязки к IP. Ну, или еще круче, перехватить app_id и app_secret во время авторизации официального приложения. Всё бы ничего, если бы не авторизация, конечно же, по https протоколу.
Загоревшись идеей кражи app_id и app_secret пришла в голову еще одна идея — декомпилировать клиент и попробовать поискать там.
Сказано — сделано: наверняка metro-приложение VK написано на C#, значит нужно найти C# декомпилятор. Первым в Google нашёлся JetBrains dotPeek. Хорошо, попробуем.
Далее неплохо было бы найти само приложение VK. После не очень долгого поиска было выяснено, что metro-приложения в Windows 8.1 хранятся в скрытой папке C:Program FilesWindowsApps.
Отлично! Пытаемся зайти и видим:
Мы, вроде бы, администраторы, тыкаем на «Продолжить»:
Весело, зайдём на вкладку «Безопасность», там нам предложат задать особые разрешения в «Дополнительно», зайдем в «Дополнительно»:
Поменяем владельца на себя, щелкнув на «Изменить», введя в диалоге свой email учетной записи microsoft, либо имя локального пользователя и щелнув на «Проверить имена». Сохраним всё это и теперь мы можем зайти в папку с нашими metro-приложениями. Ищем папку с VK, забираем оттуда VK.exe и скармливаем его нашему декомпилятору. Структура приложения видна для нас идеально, все названия функций и классов сохранились, недолгим гулянием по классам находим функцию Authorize, содержащую строку req, в которой есть два замечательных параметра:
Вуаля! client_id и client_secret наши.
Теперь мы можем авторизовываться, используя прямую авторизацию!
Попользовавшись данными client_id и client_secret мне все-таки стало интересно, что ответит поддержка на возможность их использования. После небольшой дискуссии был получен следующий ответ:
Интересная, конечно, позиция. Хорошо, расслабляемся и пользуемся.
Шаг 2. Собственно каркас
Желаемый каркас всё-таки был написан. В качестве языка программирования был выбран Python.
Состоит он из ядра и подключаемых плагинов. Ядро осуществляет авторизацию, работу с sqlite базой данных, импорт плагинов, опрос longpoll-сервера.
Плагины гибко взаимодействуют с ядром. О структуре плагина:
Чтобы ядро восприняло файл как плагин, в нем должна быть объявлена переменная:
Для того, чтобы добавить параметры в конфиг-файл, плагину необходимо объявить переменную config_parameters:
Чтобы создать таблицы в БД (если они еще не существуют), необходимо объявить переменную sql_tables:
Также реализован набор стандартных хендлеров (добавить новые хендлеры можно и в плагинах, так уже реализован хендлер текстовых команд).
- before_auth_handlers — функции вызываются перед авторизацией, с единственным параметром — основным объектом, в котором можно получить доступ к VK API, хоть это и бесполезно перед авторизацией
- after_auth_handlers — функции вызываются после авторизации, с тем же единственным параметром
- exit_handlers — функции вызываются перед выходом, так же с единственным параметром
- longpoll_handlers — функции вызываются при получении сообщения от longpoll-сервера, параметров здесь много, что они значат можно посмотреть в документации по VK API: (vkbuddy, code, msgid, flags, from_id, ts, subj, text, attachments)
На github можно ознакомиться с результатом, примерами плагинов и прочим, а также поучаствовать в разработке.
VK requests for humans™
vk.com is the largest social network in Russia.
Requirements
- python (2.7, 3.4, 3.5, 3.6)
NOTE: Python 2.7 will be no longer supported starting from the version 2.0.0
Install
Usage and features
Simple queries
User token with login and password
Fits the usecase when you run queries from one on the backend from one of your accounts
Using service token
Service token is preferable way, because it does not require user credentials and oauth requests, but not all the methods can be called with service token (e.g execute can’t be)
More info about service token.
Using client access token
For example when you got a token on the client side (implicit flow) and want to query API on the backend.
Use service_token parameter as in the example above.
User token with client_secret (Direct Authorization)
Trusted applications can get unlimited access_token to access API by passing with application ID, username, password and client_secret — secret key of your application.
More info about Direct Authorization.
Using custom parameters
Scope or api version
Just pass scope and/or api_version parameters like
HTTP parameters
To override requests http parameters (e.g ssl options), just use http_params as follows:
Using HTTP proxy
To use proxy server just pass it to the http_params , e.g
For more info, take a look at requests docs
Enable logging
To enable library logging in your project you should do as follows:
Auto-resolving conflicts when you’re getting access from unusual place
Just pass your phone number during API initialization. In case of security check it will be handled automatically, otherwise console input will be asked
Interactive session
Interactive session gives you control over login parameters during the runtime.
Useful if
- 2FA authentication required
- CAPTCHA required
- For testing purposes
Usage
If you don’t pass login, password and app_id you will be asked to prompt it, i.e having this
You will be asked only for 2FA authentication or captcha code if required
Streaming API
Streaming API allows to subscribe on the events from vk.
NOTE: Only for python 3.4 and later
Install
Stream rules
Consumer
Streaming API provides convenient coroutine-based handler interface (callback)
Official API docs
Tests
Tests are mostly checking integration part, so it requires some vk authentication data.
Before running tests locally define environment variables:
Bug tracker
Warm welcome for suggestions and concerns. Feel free to submit it to the Issues section
Авторизация в VK с помощью requests
Хочу авторизоваться на сайте vk.com и получить html своей страницы. В запросе передаю логин/пароль как параметры формы.
На что получаю html с предложение пройти авторизацию. Что я делаю не так?
Я не знаю, на основании чего вы такой код написали.
Но для авторизации в VK использует oauth, читаем доки.
Дизайн сайта / логотип © 2023 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2023.7.31.43550
Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.
Авторизация в VK для людей
Здравствуй, дорогой читатель. Если тебе хотя бы однажды доводилось работать с API Вконтакте и при этом писать все на python , вероятно, авторизация приложения заставила тебя сделать несколько приседаний, после которых ног либо не чувствуешь и падаешь в обморок, либо вкачиваешь квадрицепс и все же пробиваешь API, как Ван Дамм.
По какой-то причине этот, казалось бы, самый непримечательный этап поначалу отнимает огромное количество сил и времени. Моя задача: помочь читателям Хабра избежать травм ног.
Далее я предлагаю рассмотреть небольшую библиотеку, позволяющую в одну строчку авторизовать свое приложение для конкретного пользователя и получить access_token . В конце статьи представлена ссылка на github-репозиторий этой библиотеки с quickstart’ом в README -файле.
Задача
Хотим небольшой модуль, который позволяет провести авторизацию красиво, универсально и максимально надежно, а использовать который очень просто.
Стоит сказать, что данное решение является усовершенствованием и обобщением варианта, предложенного в этой статье.
Итак, используем python3.5 , библиотеку для html запросов requests и getpass для скрытого ввода пароля.
Наша задача: несколько раз обратиться по верному адресу, каждый раз парсить <form> , отправлять ответ и наконец получить желанный access_token .
Реализация
Начнем с создания класса. При инициализации будем требовать список «разрешений», к которым приложение хочет получить доступ, id этого приложения и версию API VK. Плюсом добавим несколько необязательных параметров, значение каждого из которых прояснится далее.
Как было сказано в уже упомянутой статье, нам необходимо искусно ворочать cookie и redirect’ы. Все это за нас делает библиотека requests с объектом класса Session. Заведем и себе такой в поле self.session . Для парсинга html документа используется стандартный класс HTMLParser из модуля html.parser . Для парсера тоже написан класс ( FormParser ), разбирать который большого смысла нет, так как он почти полностью повторяет таковой из упомянутой статьи. Существенное отличие лишь в том, что использованный здесь позволяет изящно отклонить авторизацию приложения на последнем шаге, если вы вдруг передумали.
Поля user_id и access_token будут заполнены после успешной авторизации, response хранит в себе результат последнего html запроса.
Пользователю библиотеки предоставим один-единственный метод – authorize , который совершает 3 шага:
- запрос на авторизацию приложения
- авторизация пользователя
2.1 введение кода-ключа в случае двух-факторной авторизации - подтверждение разрешения на использование permissions
Пройдемся по каждому шагу.
Шаг 1. Запрос на авторизацию приложения
Аккуратно составляем url запроса (про параметры можно прочитать здесь), отправляем запрос и парсим полученный html.
Шаг 2. Авторизация пользователя
Реализованы методы _log_in() и _two_fact_auth() для [не]успешной авторизации пользователя в вк, если он не авторизован (а он точно не авторизован). Оба метода используют ранее определенные поля email , pswd , two_factor_auth и security_code . Если какое-то из полей не было подано аргументом при инициализации объекта класса VKAuth , их попросят ввести в консоли, а случае неудачи попросят ввести заново. Двух-факторная авторизация опциональна и по умолчанию отключена, и наш модуль уведомляет пользователя о ее присутствии ошибкой.
Шаг 3. Подтверждение permissions и получение access_token
Самое сложное позади. Теперь дело за малым. Используем наше усовершенствование парсера формы, чтоб найти в только что поступившем к нам html документе кнопку с надписью «Allow» и вытащить из нее url подтверждения авторизации. Рядом находится кнопка с отказом – сохраним и ее url. Поле auto_access по умолчанию находится в состоянии True , так что это подтверждение ни чуть не должно осложнить нам жизнь.
Наконец, сохраним полученные access_token и user_id из url, который был передан после подтверждения авторизации.
VK requests for humans™
vk.com is the largest social network in Russia.
Requirements
- python (2.7, 3.4, 3.5, 3.6)
NOTE: Python 2.7 will be no longer supported starting from the version 2.0.0
Install
Usage and features
Simple queries
User token with login and password
Fits the usecase when you run queries from one on the backend from one of your accounts
Using service token
Service token is preferable way, because it does not require user credentials and oauth requests, but not all the methods can be called with service token (e.g execute can’t be)
More info about service token.
Using client access token
For example when you got a token on the client side (implicit flow) and want to query API on the backend.
Use service_token parameter as in the example above.
User token with client_secret (Direct Authorization)
Trusted applications can get unlimited access_token to access API by passing with application ID, username, password and client_secret — secret key of your application.
More info about Direct Authorization.
Using custom parameters
Scope or api version
Just pass scope and/or api_version parameters like
HTTP parameters
To override requests http parameters (e.g ssl options), just use http_params as follows:
Using HTTP proxy
To use proxy server just pass it to the http_params , e.g
For more info, take a look at requests docs
Enable logging
To enable library logging in your project you should do as follows:
Auto-resolving conflicts when you’re getting access from unusual place
Just pass your phone number during API initialization. In case of security check it will be handled automatically, otherwise console input will be asked
Interactive session
Interactive session gives you control over login parameters during the runtime.
Useful if
- 2FA authentication required
- CAPTCHA required
- For testing purposes
Usage
If you don’t pass login, password and app_id you will be asked to prompt it, i.e having this
You will be asked only for 2FA authentication or captcha code if required
Streaming API
Streaming API allows to subscribe on the events from vk.
NOTE: Only for python 3.4 and later
Install
Stream rules
Consumer
Streaming API provides convenient coroutine-based handler interface (callback)
Official API docs
Tests
Tests are mostly checking integration part, so it requires some vk authentication data.
Before running tests locally define environment variables:
Bug tracker
Warm welcome for suggestions and concerns. Feel free to submit it to the Issues section
Авторизация в VK для людей
Здравствуй, дорогой читатель. Если тебе хотя бы однажды доводилось работать с API Вконтакте и при этом писать все на python , вероятно, авторизация приложения заставила тебя сделать несколько приседаний, после которых ног либо не чувствуешь и падаешь в обморок, либо вкачиваешь квадрицепс и все же пробиваешь API, как Ван Дамм.
По какой-то причине этот, казалось бы, самый непримечательный этап поначалу отнимает огромное количество сил и времени. Моя задача: помочь читателям Хабра избежать травм ног.
Далее я предлагаю рассмотреть небольшую библиотеку, позволяющую в одну строчку авторизовать свое приложение для конкретного пользователя и получить access_token . В конце статьи представлена ссылка на github-репозиторий этой библиотеки с quickstart’ом в README -файле.
Задача
Хотим небольшой модуль, который позволяет провести авторизацию красиво, универсально и максимально надежно, а использовать который очень просто.
Стоит сказать, что данное решение является усовершенствованием и обобщением варианта, предложенного в этой статье.
Итак, используем python3.5 , библиотеку для html запросов requests и getpass для скрытого ввода пароля.
Наша задача: несколько раз обратиться по верному адресу, каждый раз парсить <form> , отправлять ответ и наконец получить желанный access_token .
Реализация
Начнем с создания класса. При инициализации будем требовать список «разрешений», к которым приложение хочет получить доступ, id этого приложения и версию API VK. Плюсом добавим несколько необязательных параметров, значение каждого из которых прояснится далее.
Как было сказано в уже упомянутой статье, нам необходимо искусно ворочать cookie и redirect’ы. Все это за нас делает библиотека requests с объектом класса Session. Заведем и себе такой в поле self.session . Для парсинга html документа используется стандартный класс HTMLParser из модуля html.parser . Для парсера тоже написан класс ( FormParser ), разбирать который большого смысла нет, так как он почти полностью повторяет таковой из упомянутой статьи. Существенное отличие лишь в том, что использованный здесь позволяет изящно отклонить авторизацию приложения на последнем шаге, если вы вдруг передумали.
Поля user_id и access_token будут заполнены после успешной авторизации, response хранит в себе результат последнего html запроса.
Пользователю библиотеки предоставим один-единственный метод – authorize , который совершает 3 шага:
- запрос на авторизацию приложения
- авторизация пользователя
2.1 введение кода-ключа в случае двух-факторной авторизации - подтверждение разрешения на использование permissions
Пройдемся по каждому шагу.
Шаг 1. Запрос на авторизацию приложения
Аккуратно составляем url запроса (про параметры можно прочитать здесь), отправляем запрос и парсим полученный html.
Шаг 2. Авторизация пользователя
Реализованы методы _log_in() и _two_fact_auth() для [не]успешной авторизации пользователя в вк, если он не авторизован (а он точно не авторизован). Оба метода используют ранее определенные поля email , pswd , two_factor_auth и security_code . Если какое-то из полей не было подано аргументом при инициализации объекта класса VKAuth , их попросят ввести в консоли, а случае неудачи попросят ввести заново. Двух-факторная авторизация опциональна и по умолчанию отключена, и наш модуль уведомляет пользователя о ее присутствии ошибкой.
Шаг 3. Подтверждение permissions и получение access_token
Самое сложное позади. Теперь дело за малым. Используем наше усовершенствование парсера формы, чтоб найти в только что поступившем к нам html документе кнопку с надписью «Allow» и вытащить из нее url подтверждения авторизации. Рядом находится кнопка с отказом – сохраним и ее url. Поле auto_access по умолчанию находится в состоянии True , так что это подтверждение ни чуть не должно осложнить нам жизнь.
Наконец, сохраним полученные access_token и user_id из url, который был передан после подтверждения авторизации.
Авторизация в VK с помощью requests
Хочу авторизоваться на сайте vk.com и получить html своей страницы. В запросе передаю логин/пароль как параметры формы.
На что получаю html с предложение пройти авторизацию. Что я делаю не так?
Я не знаю, на основании чего вы такой код написали.
Но для авторизации в VK использует oauth, читаем доки.
Дизайн сайта / логотип © 2023 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2023.7.31.43550
Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.
Авторизация в VK API с помощью логина и пароля
2014-08-15 в 10:28, admin , рубрики: python3, vk api
Давно хотелось написать какое-нибудь приложение, используя VK API. Решено было написать некий каркас, добавляя плагины к которому можно было бы реализовать какие-то мелкие задачи, которые нужны в данный момент: от скачивания музыки до банального поддержания аккаунта онлайн. Запускать данное творение планировалось как на сервере, так и на ПК. С проблемами, вставшими на моем пути во время разработки, включая озвученную в заголовке, я и хотел бы вас познакомить.
Шаг 0. Изучение документации
Итак, задача поставлена, теперь необходимо изучить платформу VK API. Ознакомившись с методами было замечено, что многие из них требуют получения access_token, или, проще говоря, авторизации пользователя.
- OAuth-авторизация
- Прямая авторизация
- Авторизация с использованием официального приложения (предоставляется в SDK)
Теперь подробнее о методах в порядке возрастания их полезности:
Авторизация с использованием официального приложения
Приложение состыковывается с официальным приложением для Android или iOS, которое дает ему интерфейс для взаимодействия с API.
Собственно, без комментариев, способ совсем для других платформ и задач.
OAuth-авторизация
Необходимо открыть страницу авторизации в браузере, где пользователь, если он еще не авторизован на сайте, введет свой логин и пароль и разрешит доступ к его аккаунту.
Этот способ не понравился сразу по двум причинам: во-первых, токен таким образом необходимо получать каждые 24 часа, во-вторых, для его получения нужно каждый раз заходить на сервер, открывать lynx, авторизовываться и разрешать доступ. Не очень удобно. Есть, конечно, такой вариант, но всё-таки решено было поискать что-то другое.
Прямая авторизация
Передача логина и пароля непосредственно GET-запросом на определенный URL. Токен в итоге получается бессрочный и без привязки по IP.
Идеально подходящий, казалось бы, способ, если бы не одно «но»:
Внимание! Доступ к этому типу авторизации может быть получен только после предварительного согласования с администрацией ВКонтакте.
Для подачи заявки на получение доступа Вам необходимо обратиться в службу поддержки по адресу vk.com/support, указав ID Вашего приложения.
В настоящий момент эта возможность предоставляется только для платформ, не поддерживающих стандартную авторизацию. В заявке необходимо кратко описать функционал приложения.
Объяснять, что пишу просто каркас для любой своей будущей идеи, думаю, было бессмысленно, поэтому пришлось искать какие-то обходные пути.
Шаг 1. Обходные пути
Расстроившись тем фактом, что простым смертным получить доступ к прямой авторизации достаточно сложно, я уже чуть было не похоронил свою идею.
Однако, в один прекрасный день, во время чтения ленты новостей в официальном приложении VK на планшете под управлением Windows 8, в голову пришла мысль: а почему бы не взять access_token из этого приложения, он ведь бессрочный и без привязки к IP. Ну, или еще круче, перехватить app_id и app_secret во время авторизации официального приложения. Всё бы ничего, если бы не авторизация, конечно же, по https протоколу.
Загоревшись идеей кражи app_id и app_secret пришла в голову еще одна идея — декомпилировать клиент и попробовать поискать там.
Сказано — сделано: наверняка metro-приложение VK написано на C#, значит нужно найти C# декомпилятор. Первым в Google нашёлся JetBrains dotPeek. Хорошо, попробуем.
Далее неплохо было бы найти само приложение VK. После не очень долгого поиска было выяснено, что metro-приложения в Windows 8.1 хранятся в скрытой папке C:Program FilesWindowsApps.
Отлично! Пытаемся зайти и видим:
Мы, вроде бы, администраторы, тыкаем на «Продолжить»:
Весело, зайдём на вкладку «Безопасность», там нам предложат задать особые разрешения в «Дополнительно», зайдем в «Дополнительно»:
Поменяем владельца на себя, щелкнув на «Изменить», введя в диалоге свой email учетной записи microsoft, либо имя локального пользователя и щелнув на «Проверить имена». Сохраним всё это и теперь мы можем зайти в папку с нашими metro-приложениями. Ищем папку с VK, забираем оттуда VK.exe и скармливаем его нашему декомпилятору. Структура приложения видна для нас идеально, все названия функций и классов сохранились, недолгим гулянием по классам находим функцию Authorize, содержащую строку req, в которой есть два замечательных параметра:
Вуаля! client_id и client_secret наши.
Теперь мы можем авторизовываться, используя прямую авторизацию!
Попользовавшись данными client_id и client_secret мне все-таки стало интересно, что ответит поддержка на возможность их использования. После небольшой дискуссии был получен следующий ответ:
Интересная, конечно, позиция. Хорошо, расслабляемся и пользуемся.
Шаг 2. Собственно каркас
Желаемый каркас всё-таки был написан. В качестве языка программирования был выбран Python.
Состоит он из ядра и подключаемых плагинов. Ядро осуществляет авторизацию, работу с sqlite базой данных, импорт плагинов, опрос longpoll-сервера.
Плагины гибко взаимодействуют с ядром. О структуре плагина:
Чтобы ядро восприняло файл как плагин, в нем должна быть объявлена переменная:
Для того, чтобы добавить параметры в конфиг-файл, плагину необходимо объявить переменную config_parameters:
Чтобы создать таблицы в БД (если они еще не существуют), необходимо объявить переменную sql_tables:
Также реализован набор стандартных хендлеров (добавить новые хендлеры можно и в плагинах, так уже реализован хендлер текстовых команд).
- before_auth_handlers — функции вызываются перед авторизацией, с единственным параметром — основным объектом, в котором можно получить доступ к VK API, хоть это и бесполезно перед авторизацией
- after_auth_handlers — функции вызываются после авторизации, с тем же единственным параметром
- exit_handlers — функции вызываются перед выходом, так же с единственным параметром
- longpoll_handlers — функции вызываются при получении сообщения от longpoll-сервера, параметров здесь много, что они значат можно посмотреть в документации по VK API: (vkbuddy, code, msgid, flags, from_id, ts, subj, text, attachments)
На github можно ознакомиться с результатом, примерами плагинов и прочим, а также поучаствовать в разработке.