Слишком общий вопрос :-)
Манипулирование живым браузером - плохая идея, это ненадежно и можно споткнуться на всяких антивирусах. На уровне приложения лучше использовать компонент
WebBrowser (по сути -
Internet Explorer) или альтернативу (это будет минимум мегабайт 20-40 к размеру программы).
Давным-давно писал статейку по работе с
ВКонтакте, не знаю насколько сейчас актуальна и работает ли:
Разработка desktop-приложения для «ВКонтакте» на C#
Есть также библиотека с открытым исходным кодом:
https://github.com/alekseynemiro/nemiro.oauth.dll
Попробуйте выдернуть
клиент для ВКонтакте (включая зависимости) или внедрить целиком, если не устроит присутствие лишней библиотеки в проекте (даже двух, если используется
Windows Forms) :-)
Готовые формы для
Windows Forms:
https://github.com/alekseynemiro/Nemiro.OAuth.Logi...
Статья по использованию библиотеки:
Авторизация по протоколу OAuth в проектах .NET Fra...
Демонстрация
ASP.NET MVC:
demo-oauth.nemiro.net
Получение адреса для авторизации делается примерно так:
string applicationId = "идентификатор вашего приложения";
string scope = "status,email";
string authorizeUrl = "https://oauth.vk.com/authorize";
authorizeUrl += String.Format("?client_id={0}&response_type=code", applicationId);
// authorizeUrl += String.Format("&state={0}", "все что вам нужно");
authorizeUrl += String.Format("&scope={0}", scope);
Адрес
authorizeUrl можно открыть в
WebBrowser:
webBrowser1.Navigate(authorizeUrl). В обработчике события
DocumentCompleted можно получать код авторизации или маркер доступа (смотря какой
response_type используется).
На примере
обработчика по умолчанию из моей библиотеки:
protected internal void DefaultCallback(object sender, WebBrowserCallbackEventArgs e)
{
// ожидаем, когда будет получен результат
if (e.Url.Query.IndexOf("code=") != -1 || e.Url.Query.IndexOf("oauth_verifier=") != -1)
{
// результат получен, извлекаем код авторизации
// из строка параметров запроса
// e.Url.Query // <= строка параметров запроса
// либо oauth_verifier, либо code - точно уже не помню
}
}
Но вообще, все может быть чуть сложнее. Нужно учитывать версию
IE и, в идеале, использовать самую свежую (см.
SetIEVersion). Вероятность появления ошибок в клиентском коде и адекватная реакция на них. Всех подводных камней сейчас и не припомню.
Если
response_type=code, как в указанном выше коде получения адрес авторизации, то конвертировать код авторизации в маркер доступа можно выполнив запрос (скорее всего
POST) к странице
https://oauth.vk.com/access_token, на которую нужно передать следующие параметры:
code=полученный код
client_id=идентификатор приложения
client_secret=секретный ключ
grant_type=authorization_code
Запрос маркера доступа нужно делать без
WebBrowser, а например, с помощью
WebClient или
HttpClient.
Если все правильно, сервер вернет
access_token.