Социальная сеть ВКонтакте несколько странным образом заботится о безопасности своих пользователей, что чинит всяческие препятствия для авторизации отличными от браузера способами при этом не предоставляя SSL. Далее представлен скрипт на Ruby, который позволяет быстро подключить Desktop приложение к аккаунту по E-Mail и паролю и далее использовать API.
Данный скрипт не предназначен для «промышленного» использования и метод авторизации не является официальным и может измениться.
В результате получаем ответ следующего вида:
Он был написан в один вечер для личных целей и не умеет работать с аккаунтами не привязанными к мобильному телефону, так как требуется ввод капчи. А также не обрабатывает возможные ошибки.
Вы можете его модифицировать под свои нужды как вам угодно, поскольку принцип ясен.
Как работать с API подробно описано здесь: vk.com/developers.php
Про права приложения написано там же. При получении формы авторизации было указано «settings=32767», то есть 2^n-1 такое, что все права заведомо не могут быть получены. На сегодня максимальным правам соответствует 16383, что в будущем может измениться.
P.S. Из заголовка убрано «простая авторизация», так как она относительно простая, но тривиальной ее назвать трудно.
Данный скрипт не предназначен для «промышленного» использования и метод авторизации не является официальным и может измениться.
require 'net/http' # Параметры (впишите свои) app_id = '1234567' # ID приложения, присваивается при создании email = 'mail@example.com' password = 'qwerty' app_rights = 16383 # Права приложения (16383 - полный доступ) # Залогинивание и получение куки resp = Net::HTTP.post_form(URI.parse('http://vk.com/login.php'), {'m' => '1', 'email' => email, 'pass' => password}) cookies = resp.response['set-cookie'] remixsid = cookies.split('remixsid=')[1].split(';')[0].split(',')[0] # Подключаемся снова к http://vk.com header = { "Cookie" => 'remixsid=' + remixsid } conn = Net::HTTP.new('vk.com', 80) # Парсим форму авторизации приложения resp = conn.get('http://vk.com/login.php?app=' + app_id + '&layout=popup&type=browser&settings=32767', header) auth_hash = resp.body.split('var auth_hash = \'')[1].split('\';')[0] rights_hash = resp.body.split('var app_settings_hash = \'')[1].split('\';')[0] # Устанавливаем желаемые права req = '' mask = 1 14.times do if (app_rights & mask == 0) req += ('&app_settings_' + mask.to_s + '=0') else req += ('&app_settings_' + mask.to_s + '=1') end mask *= 2 end resp = conn.get('http://vk.com/apps.php?act=a_save_settings&addMember=1' + req + '&hash=' + rights_hash + '&id=' + app_id, header) # Авторизизуем приложение resp = conn.get('http://vk.com/login.php?act=a_auth&app=' + app_id + '&hash=' + auth_hash + '&permanent=1', header) auth_json = resp.body # У нас есть параметры авторизации для API в JSON puts auth_json # Можно сделать что-то еще
В результате получаем ответ следующего вида:
{"mid":1000xxxxx,"sid":"xxxx6ed0xxxx2516xxxx49eacd0ec30f9961c01d30d15c3152e459xxxx", "secret":"335xxxxxxx","expire":0}
Он был написан в один вечер для личных целей и не умеет работать с аккаунтами не привязанными к мобильному телефону, так как требуется ввод капчи. А также не обрабатывает возможные ошибки.
Вы можете его модифицировать под свои нужды как вам угодно, поскольку принцип ясен.
Как работать с API подробно описано здесь: vk.com/developers.php
Про права приложения написано там же. При получении формы авторизации было указано «settings=32767», то есть 2^n-1 такое, что все права заведомо не могут быть получены. На сегодня максимальным правам соответствует 16383, что в будущем может измениться.
P.S. Из заголовка убрано «простая авторизация», так как она относительно простая, но тривиальной ее назвать трудно.
