Авторизация в VK API с помощью логина и пароля / СоХабр
Давно хотелось написать какое-нибудь приложение, используя VK API. Решено было написать некий каркас, добавляя плагины к которому можно было бы реализовать какие-то мелкие задачи, которые нужны в данный момент: от скачивания музыки до банального поддержания аккаунта онлайн. Запускать данное творение планировалось как на сервере, так и на ПК. С проблемами, вставшими на моем пути во время разработки, включая озвученную в заголовке, я и хотел бы вас познакомить.
Шаг 0. Изучение документации
Итак, задача поставлена, теперь необходимо изучить платформу VK API. Ознакомившись с методами было замечено, что многие из них требуют получения access_token, или, проще говоря, авторизации пользователя.
Способов авторизации было предложено три:
- OAuth-авторизация
- Прямая авторизация
- Авторизация с использованием официального приложения (предоставляется в SDK)
Теперь подробнее о методах в порядке возрастания их полезности:
Авторизация с использованием официального приложения
Приложение состыковывается с официальным приложением для Android или iOS, которое дает ему интерфейс для взаимодействия с API.
Собственно, без комментариев, способ совсем для других платформ и задач.
OAuth-авторизация
Необходимо открыть страницу авторизации в браузере, где пользователь, если он еще не авторизован на сайте, введет свой логин и пароль и разрешит доступ к его аккаунту.
Прямая авторизация
Передача логина и пароля непосредственно GET-запросом на определенный URL. Токен в итоге получается бессрочный и без привязки по IP.
Идеально подходящий, казалось бы, способ, если бы не одно «но»:
Внимание! Доступ к этому типу авторизации может быть получен только после предварительного согласования с администрацией ВКонтакте.Для подачи заявки на получение доступа Вам необходимо обратиться в службу поддержки по адресу vk.com/support, указав ID Вашего приложения.
В настоящий момент эта возможность предоставляется только для платформ, не поддерживающих стандартную авторизацию. В заявке необходимо кратко описать функционал приложения.
Объяснять, что пишу просто каркас для любой своей будущей идеи, думаю, было бессмысленно, поэтому пришлось искать какие-то обходные пути.
Шаг 1. Обходные пути
Расстроившись тем фактом, что простым смертным получить доступ к прямой авторизации достаточно сложно, я уже чуть было не похоронил свою идею.
Однако, в один прекрасный день, во время чтения ленты новостей в официальном приложении VK на планшете под управлением Windows 8, в голову пришла мысль: а почему бы не взять access_token из этого приложения, он ведь бессрочный и без привязки к IP. Ну, или еще круче, перехватить app_id и app_secret
Загоревшись идеей кражи app_id и app_secret пришла в голову еще одна идея — декомпилировать клиент и попробовать поискать там.
Сказано — сделано: наверняка metro-приложение VK написано на C#, значит нужно найти C# декомпилятор. Первым в Google нашёлся JetBrains dotPeek. Хорошо, попробуем.
Далее неплохо было бы найти само приложение VK. После не очень долгого поиска было выяснено, что metro-приложения в Windows 8.1 хранятся в скрытой папке C:\Program Files\WindowsApps.
Отлично! Пытаемся зайти и видим:
Мы, вроде бы, с правами администратора, нажимаем на «Продолжить»:
Весело, зайдём на вкладку «Безопасность», там нам предложат задать особые разрешения в «Дополнительно», зайдем в «Дополнительно»:
Поменяем владельца на себя, щелкнув на «Изменить», введя в диалоге свой email учетной записи microsoft, либо имя локального пользователя и щелнув на «Проверить имена». Сохраним всё это и теперь мы можем зайти в папку с нашими metro-приложениями. Ищем папку с VK, забираем оттуда VK.exe и скармливаем его нашему декомпилятору. Структура приложения видна для нас идеально, все названия функций и классов сохранились, недолгим гулянием по классам находим функцию Authorize, содержащую строку req, в которой есть два замечательных параметра:
Вуаля! client_id и client_secret наши.
client_id и client_secret для копирования
client_id=3697615
client_secret=AlVXZFMUqyrnABp8ncuU
Теперь мы можем авторизовываться, используя прямую авторизацию!
Интересная, конечно, позиция. Хорошо, расслабляемся и пользуемся.
Шаг 2.
Собственно каркас
Желаемый каркас всё-таки был написан. В качестве языка программирования был выбран Python.
Состоит он из ядра и подключаемых плагинов. Ядро осуществляет авторизацию, работу с sqlite базой данных, импорт плагинов, опрос longpoll-сервера.
Плагины гибко взаимодействуют с ядром. О структуре плагина:
Чтобы ядро восприняло файл как плагин, в нем должна быть объявлена переменная:
__vkbuddyplugin__ = True
Для того, чтобы добавить параметры в конфиг-файл, плагину необходимо объявить переменную config_parameters:
config_parameters = [ {'name': 'parameter_name', # имя параметра 'required': False, # bool, является ли параметр обязательным 'description': 'parameter_description', # описание параметра 'default': 'parameter_value', # значение параметра по умолчанию 'typ': str}, # тип параметра ... ]
Чтобы создать таблицы в БД (если они еще не существуют), необходимо объявить переменную sql_tables:
sql_tables = [ {'name': 'table_name', # имя таблицы 'structure':( # структура таблицы: пары (имя столбца, тип столбца) ('id', int), ('column_name', float) )}, . .. ]
Также реализован набор стандартных хендлеров (добавить новые хендлеры можно и в плагинах, так уже реализован хендлер текстовых команд).
Стандартные хендлеры:
- 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 можно ознакомиться с результатом, примерами плагинов и прочим, а также поучаствовать в разработке.
Спасибо за внимание!
Вход в систему Super Auth — SuperAuth
Вход в систему Super Auth — SuperAuth Нет пароля. Нет регистрации.Как это работает
SuperAuth — это приложение и безопасный сервер аутентификации. Загрузите приложение, соедините его со своими адресами электронной почты и используйте систему идентификации отпечатков пальцев или PIN-код вашего устройства для безопасного входа в любую службу с поддержкой SuperAuth.
Скачать
Доступно бесплатно в Apple App Store и Google Play Store. Зарегистрируйтесь, указав свой адрес электронной почты и свои данные.
Сканировать QR-код
Когда вы найдете веб-сайт или приложение с кнопкой SuperAuth, коснитесь ее и отсканируйте QR-код, полученный с помощью приложения SuperAuth.
Идентификатор отпечатка пальца
Приложение запросит у вас (вежливо) ваш красивый уникальный отпечаток пальца. Ткните пальцем и наблюдайте, как происходит волшебство! Вы также можете использовать свой пин-код для входа в систему.
Ты в деле!
Приложение покажет вам уникальный идентификационный код, и веб-сайт покажет вам тот же код, чтобы вы знали, что вы в безопасности.
Видео
Самый простой уровень безопасности, с которым вы когда-либо сталкивались
SuperAuth был разработан, чтобы быть простым для пользователей и разработчиков и невозможным для хакеров. Ваши данные сохраняются только на ВАШЕМ устройстве.
Пароли не требуются
Черт возьми, никогда больше не ИСПОЛЬЗУЙТЕ пароль! SuperAuth генерирует новый безопасный пароль для вашего входа в систему.
Нет телефона? Нет проблем
Если у вас нет с собой телефона, мы отправим вам временную ссылку для входа на вашу электронную почту с простым кодом доступа.
Super Secure
SuperAuth создан на основе лучшего в отрасли шифрования. Ваша информация никогда не сохраняется дважды одним и тем же способом.
Пароли не требуются Черт, больше никогда не ИСПОЛЬЗУЙ пароль! SuperAuth генерирует новый безопасный пароль для вашего входа в систему. Нет телефона? Нет проблем Если у вас нет с собой телефона, мы отправим вам временную ссылку для входа на вашу электронную почту с простым кодом доступа. Super Secure SuperAuth создан на основе лучшего в отрасли шифрования. Ваша информация никогда не сохраняется дважды одним и тем же способом. На основе электронной почты SuperAuth регистрирует ваш адрес или адреса электронной почты на нашем сервере, чтобы вы могли легко входить в рабочие и личные системы. Без регистрации Простое использование SuperAuth в системе, которой вы никогда раньше не пользовались, позволит вам зарегистрироваться без заполнения форм! Вход в любом месте SuperAuth не только для Интернета. Используйте его для безопасного и надежного входа в другие приложения, киоски и приложения SmartTV.
Привязан к вашему адресу электронной почты
SuperAuth регистрирует ваш адрес или адреса электронной почты на нашем сервере, чтобы вы могли легко входить в рабочие и личные системы.
Регистрационных форм больше нет
Простое использование SuperAuth в системе, которой вы никогда раньше не пользовались, позволит вам зарегистрироваться без заполнения форм!
Вход в любом месте
SuperAuth не только для Интернета. Используйте его для безопасного и надежного входа в другие приложения, киоски и приложения SmartTV.
логин — SuperAuth
логин — SuperAuthНет пароля. Нет регистрации.
Как это работает
SuperAuth — это приложение и безопасный сервер аутентификации. Загрузите приложение, соедините его со своими адресами электронной почты и используйте систему идентификации отпечатков пальцев или PIN-код вашего устройства для безопасного входа в любую службу с поддержкой SuperAuth.
Скачать
Доступно бесплатно в Apple App Store и Google Play Store. Зарегистрируйтесь, указав свой адрес электронной почты и свои данные.
Сканировать QR-код
Когда вы найдете веб-сайт или приложение с кнопкой SuperAuth, коснитесь ее и отсканируйте QR-код, полученный с помощью приложения SuperAuth.
Идентификатор отпечатка пальца
Приложение запросит у вас (вежливо) ваш красивый уникальный отпечаток пальца. Ткните пальцем и наблюдайте, как происходит волшебство! Вы также можете использовать свой пин-код для входа в систему.
Ты в деле!
Приложение покажет вам уникальный идентификационный код, и веб-сайт покажет вам тот же код, чтобы вы знали, что вы в безопасности.
Видео
Самый простой уровень безопасности, с которым вы когда-либо сталкивались
SuperAuth был разработан, чтобы быть простым для пользователей и разработчиков и невозможным для хакеров. Ваши данные сохраняются только на ВАШЕМ устройстве.
Пароли не требуются
Черт возьми, никогда больше не ИСПОЛЬЗУЙТЕ пароль! SuperAuth генерирует новый безопасный пароль для вашего входа в систему.
Нет телефона? Нет проблем
Если у вас нет с собой телефона, мы отправим вам временную ссылку для входа на вашу электронную почту с простым кодом доступа.
Super Secure
SuperAuth создан на основе лучшего в отрасли шифрования. Ваша информация никогда не сохраняется дважды одним и тем же способом.
Пароли не требуются Черт возьми, никогда больше никогда не ИСПОЛЬЗУЙТЕ пароль! SuperAuth генерирует новый безопасный пароль для вашего входа в систему. Нет телефона? Нет проблем Если у вас нет с собой телефона, мы отправим вам временную ссылку для входа на вашу электронную почту с простым кодом доступа. Super Secure SuperAuth создан на основе лучшего в отрасли шифрования. Ваша информация никогда не сохраняется дважды одним и тем же способом. На основе электронной почты SuperAuth регистрирует ваш адрес или адреса электронной почты на нашем сервере, чтобы вы могли легко входить в рабочие и личные системы. Без регистрации Простое использование SuperAuth в системе, которой вы никогда раньше не пользовались, позволит вам зарегистрироваться без заполнения форм! Вход в любом месте SuperAuth не только для Интернета.