Для работы с API Вконтакте взял за основу данную разработку infostart.ru/public/195276/. Однако, для авторизации и получения API токена там используется браузер, встроенный в платформу, что не подходит для работы на сервере – например, если с сайтом ВК необходимо работать по расписанию регламентным заданием.
Приложенная обработка демонстрирует авторизацию и последующее получение токена во Вконтакте прямыми HTTP запросами. Ниже описан общий принцип работы. На скриншотах используется сниффер трафика Fiddler.
Авторизоваться будем через Implicit Flow - https://vk.com/dev.php?method=implicit_flow_user.
1. Обращаемся GET запросом к странице авторизации https://oauth.vk.com/authorize с передачей соответствующих параметров, указанных в документации.
От первого ответа на запрос нам понадобятся все куки:
Сохраним их для дальнейшей вставки в заголовки HTTP запроса.
А так же некоторые параметры для последующей передачи в POST запросе. Спарсим их из HTML кода страницы и так же сохраним.
2. Далее отправляем POST запросом на https://login.vk.com/ сохраненные предварительно параметры (№2 на рис.), используя так же сохраненные куки (№1 на рис.).
В ответе получим новую порцию кукисов (№3 на рис.), которую так же сохраняем. Так же сохраняем заголовок Location (№4 на рис.) – туда мы отправим следующий GET запрос.
В отличии от часто встречающегося варианта авторизации, когда в ответ на POST запрос, мы получаем в заголовке Set-Cookie, который дальше спокойно можем использовать для открытия страничек под авторизованным пользователем, в ВК конечный используемый кукис складывается из нескольких полученных на разных этапах кукисов.
Возможно, сейчас уже это обычная практика, я не особо разбираюсь в веб-технологиях, но я столкнулся с этим впервые при авторизации в ВК.
3. Отправляем GET запрос на полученный ранее адрес из заголовка Location. Отправляемые куки в данном запросе будут те же, как на 2м шаге, но с добавлением параметра «remixq_» полученного в одном из заголовках Set-cookie в предыдущем шаге.
При авторизации через браузер, на этом этапе у нас откроется страница запрашивающая разрешение на доступ вашего приложения в ВК к вашему профилю ВК.
Из этого ответа нам понадобятся куки с параметрами «remixsid» и «remixua». Причем, обратите внимание, второй передается три раза с разными значениями и разными сроками. Нам понадобится именно второй. Сохраняем их.
Так же из ответа нам необходимо спарсить из HTML кода URL, куда будем отправлять следующий POST запрос, аналогичный тому, как если бы мы в браузере нажала кнопку Разрешить доступ приложению.
4. Последний POST запрос отправляем как раз на этот URL. Параметр POST запроса статический «email_denied=0», а вот куки тут будут состоять из параметров h, s, l, p полученных еще на 2м шаге. К ним добавляем наши предыдущие куки, использованные на 3м шаге. Из полученных кук удаляем параметр «remixq» и добавляем параметры «remixsid» и «remixua» опять же полученные на предыдущем шаге.
В итоге строка параметров кукисов будет выглядеть как-то так:
Cookie: h=1; s=1; l=337429352; p=00ca61ca01b22838ba3f005a9c3ddacd256c394922029fef5da8911ba3***; remixlang=0; remixlhk=78cabec224e90ad***; remixstid=1189672849_qEjrQ9ZDsznMPM2ZpHDJJTsO8pGmMHmxZeTihLef***; remixaudio_show_alert_today=0; remixff=00; remixsid=cec454b171c123ba2009f2e7adeb6067595f6ecf89506134cfc9919511***; remixua=-1%7C-1%7C-1%7C175743***
В ответном заголовке «Location» и будет лежать наш API токен необходимый для дальнейшей работы с сайтом через API.
В обработке указывается ваш e-mail от профиля, пароль и ID зарегистрированного приложения ВК.