Регистрация Главная Сообщество
Сообщения за день Справка Регистрация
Навигация
Zhyk.org LIVE! Реклама на Zhyk.org Правила Форума Награды и достижения Доска "почета"

Результаты опроса: Стоит ли мне еще писать статьи?
Да 12 85.71%
Нет 2 14.29%
Голосовавшие: 14. Вы ещё не голосовали в этом опросе

Ответ
 
Опции темы
Старый 13.01.2017, 01:13   #1
 Разведчик
Аватар для kingSizeShoe
 
kingSizeShoe никому не известный тип
Регистрация: 11.04.2013
Сообщений: 1
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
 
Lightbulb Логинимся VK по OAuth 2.0 и работаем с API

Так как последняя статья, которая на этом форуме была написана в 2к11 году, уже давным давно не актуальна, следует снова поднять эту тему и объяснить что к чему.
Если вы хотите просто посмотреть пример, в конце статьи ссылка на скачивание.
Будет много букв, так что если вы решили это дочитать, то возьмите чаек и вкусняшки.
На данный момент VK API предоставляет большие возможности в плане создания различных Standalone приложений.
Цитата:
Standalone в понимании контакта - то приложение, которое может получить из адресной строки браузера текст (а точнее - token). Ибо токен с расширенными правами можно получить только с сервера вконтакта (на него идёт редирект. Никаким js`ом его не вытащить, не имея доступа к браузеру )

ЧАСТЬ 1. РЕГИСТРАЦИЯ STANDALONE ПРИЛОЖЕНИЯ
Для начала мы должны зарегистрировать приложение. Заходим на сайт [Ссылки могут видеть только зарегистрированные пользователи. ], авторизируемся, и переходим на вкладку:"Мои приложения".
[Ссылки могут видеть только зарегистрированные пользователи. ]
Нажимаем:"Создать приложение", выбираем Standalone-приложение.
[Ссылки могут видеть только зарегистрированные пользователи. ]
Название не играет роли.
Привязываем его к вашему устройству и вот, у вас есть собственное, никому не нужное приложение...
Опять переходим в:"Мои приложения". И нажимаем на кнопку:"Редактировать". Переходим в левом меню к настройкам.
[Ссылки могут видеть только зарегистрированные пользователи. ]
Для нас, на данный момент основными являются id приложения и его защищенный ключ. Не закрываем эту страницу и переходим к теории.
ЧАСТЬ 2. OpenID, OAuth, Token, UserID.
Представь себе стандартную ситуацию. Заходишь на сайт, смотришь новости в интернете, следишь за долларом и нефтью, и очень хочешь оставить комментарий на каком нибудь сайте и тебе приходиться ввести «Имя», «Фамилию», «Логин», «Email», «Email еще раз», «Пароль», «Снова Пароль», «Прочитать правила и согласиться со всем что тут будет происходить» и «Капчу».
Но ведь люди не дураки, и придумали Open ID.
Цитата:
OpenID — открытый стандарт децентрализованной системы аутентификации, предоставляющей пользователю возможность создать единую учётную запись для аутентификации на множестве не связанных друг с другом интернет-ресурсов, используя услуги третьих лиц.©Wikipedia

Если чуть-чуть проще, то для всех сайтов мы будем использовать один аккаунт. Вроде бы да, удобно, не нужно тысячу этих вводов Email и прочего, но с другой стороны если вдруг нас взломают, то скорее всего получат не только спам от ламоды. Такую систему ранее использовал Yandex.
Цитата:
OAuth — открытый протокол авторизации, который позволяет предоставить третьей стороне ограниченный доступ к защищённым ресурсам пользователя без необходимости передавать ей (третьей стороне) логин и пароль. ©Wikipedia

Если это же рассказать своим языком, то мы можем отдавать свой аккаунт на пользование сторонним сайтам, но с ограниченными правами. Так как в данной статье будет использоваться именно он, поговорим о нем побольше.
Работает oAuth, если не вдаваться в подробности ,по такой схеме:
  1. Получение авторизации
  2. обращение к защищенным ресурсам
Результатом авторизации будет access token - ключ, который дает нам право пользоваться защищенными ресурсами.
VK поддерживает 3 способа передачи данного ключа:
  1. Implicit flow - самый простой и быстрый способ.
  2. Authorization code flow - Двухэтапная авторизация, которая возвращает ключ прямо на сервер, откуда и была запрошена.
  3. Client credentials flow - это механизм прямой авторизации сервера приложения без участия пользователя.
В данной статье мы рассмотрим несколько способов авторизации.
Так же мы будем пользоваться библиотекой vknet, которая предоставит нам упрощенные методы авторизации и работы с API.
ЧАСТЬ 3. НАЧИНАЕМ ПИСАТЬ КОД
Решим последовательность действий для нашей программы.
  1. На форме_1 расположить кнопку, которая будет загружать вторую форму. Это будет удобно ибо будет открываться WebBrowser, авторизация будет проходить в нем, мы получим token и свой id, после чего WebBrowser закроется и откроется основное меню программы.
  2. Так как будет 2 формы, и с небольшим закосом на будущее, token и id будем сохранять в txt файле, рядом с программой.(Можно так же сделать записи в реестр, но мне больше нравиться такой способ)
  3. Получать token и id мы будем из ссылки, значит, её нужно будет распарсить.
  4. Получим имя и фамилию, которые записаны у нас вк и вывести её в label. Отправим сами себе сообщение, ведь мы программисты-одиночки
Создаем новый проeкт Windows Form и подключаем библиотеки.
VKNET подключаем через NuGet:

Создаем вторую форму и связываем с первой.
[Ссылки могут видеть только зарегистрированные пользователи. ]
Так у нас выглядит первая форма. Создаем вторую и кидаем на неё WebBrowser. Пока с дизайном все, теперь сам код:
Подключаем директивы. В первой форме используемые мной это:
Код:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using VkNet;
Во второй:
Код:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
Запишем в первую форму основные переменные.
Код:
private static long UserId;
        private static string Token = null;
Делаем обработчик при нажатии на кнопку.
Код:
private void button1_Click(object sender, EventArgs e)
        {
            VkAuth(null, null); // код кнопки, он будет обрабатывать функцию
        }
А теперь сама функция
Код:
public void VkAuth(string login, string pass)
        {
            string url = "https://oauth.vk.com/authorize?client_id=5818397&redirect_uri=https://oauth.vk.com/blank.html&scope=messages&display=popup&response_type=token&v=5.62&revoke=1";
            Form2 form2 = new Form2();
            form2.Show();
            WebBrowser browser = (WebBrowser)form2.Controls["webBrowser1"];
            browser.Navigate(url);
        }
Разберемся поподробнее в этом коде.
Код:
string url = "https://oauth.vk.com/authorize?client_id=5818397&redirect_uri=https://oauth.vk.com/blank.html&scope=messages&display=popup&response_type=token&v=5.37&revoke=1";
Тут мы вставляем ссылку, по которой будем получать token и UserId.
client_id - ваш id приложения. Необходимо поменять, но можете и моим воспользоваться.
redirect_uri - url, на который мы перейдем после авторизации. Именно в этой ссылке передается Token и UserId.
scope - Права, которые предоставит нам token. Полный список можете посмотреть [Ссылки могут видеть только зарегистрированные пользователи. ]
response_type - тип ответа, который мы хотим получить.
display - Как у нас будет отображаться страница авторизации.
v= - Версия API VK.
revoke - указывает, обязательно ли нужна авторизация, или её можно пропустить.
Теперь перейдем к Form2.
Укажем переменные, которые будут доступны всем функциям.
Код:
public static string token;
        public static string id;
Создадим обработчик событий для WebBrowser.
Код:
string url = webBrowser1.Url.ToString();  //перевод ссылки в переменную
                string l = url.Split('#')[1];                               //
                if (l[0] == 'a')                                                //
                {                                                                  //Тут происходит парсинг ссылки, после чего нужные нам переменные 
                    token = l.Split('&')[0].Split('=')[1];             //записываются в 2 файла. Файлы лежат рядом с исполняемым файлом
                    id = l.Split('=')[3];                                    //
                    StreamWriter SW = new StreamWriter(new FileStream("User_ID.txt", FileMode.Create, FileAccess.Write));
                    SW.Write(id);
                    SW.Close();
                    StreamWriter SW2 = new StreamWriter(new FileStream("Token.txt", FileMode.Create, FileAccess.Write));
                    SW2.Write(token);
                    SW2.Close();
                    if (token != "")
                    {
                        this.Hide();
                        MessageBox.Show("Авторизация удалась");    //Небольшая проверка, смогли мы авторизоваться или нет.
                    }
                }
Все! На этом весь процесс авторизации заканчивается. Теперь мы можем использовать VK API в полной мере.
ЧАСТЬ 4. ПРИВЕТ, VKNET.
На [Ссылки могут видеть только зарегистрированные пользователи. ] есть множество методов, а так же примеров запросов. Мы будем использовать users.Get и messages.send.
На первую форму накинем 2 кнопки и 1 label.
[Ссылки могут видеть только зарегистрированные пользователи. ]
Создадим для 2-х кнопок обработку события.
Многие из методов уже устарели, а мы ведь не хотим становиться динозаврами? Поэтому мы будем сразу приучаться писать в ногу со временем.(Жаль, что глаза можно об этот код сломать).
Напишем в кнопку с отправкой сообщения вот такой код.
Код:
StreamReader UserIdGet = new StreamReader(File.Open("User_ID.txt", FileMode.Open));
            UserId = Convert.ToInt64(UserIdGet.ReadLine());
            UserIdGet.Close();
            StreamReader TokenGet = new StreamReader(File.Open("Token.txt", FileMode.Open));
            Token = TokenGet.ReadLine();
            TokenGet.Close();
            var vk = new VkApi();
            vk.Authorize(Token, UserId, 0);
            string text = "Привет, aloha, belisimo";
            var col = vk.Messages.Send(new MessagesSendParams
            {
                UserId = UserId,
                Message = "Привет, aloha, belissimo",
            }); //https://vknet.github.io/vk/messages/send/
Единственное, что мы еще не разбирали, это последняя строка в функции. Именно для этого нам и нужен VKNET. Чтобы обходилось все более-менее просто и без лишних костылей.
UserId - Id пользователя, которому мы отсылаем сообщение.
Message - Текст сообщения.

Вроде бы, это все, что я хотел рассказать об этой теме.
Исходники программы - [Ссылки могут видеть только зарегистрированные пользователи. ].
Единственное что, данный метод съедает достаточно памяти. Её нужно очищать, а об этом уже вам придется позаботиться самим.
________________
Всё новое — это хорошо забытое старое

Последний раз редактировалось kingSizeShoe; 13.01.2017 в 01:32. Причина: Подредактировал цвета у глав
  Ответить с цитированием
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Помогите!] логинимся на pw.mail.ru 1q2w3e4re Общение и обсуждение Perfect World 5 09.02.2013 16:51
[Руководство] Логинимся ВКонтакте на C# Cherinho C# 68 24.10.2012 20:11
[Помогите!] Логинимся на сайте =PaLeTiZaToR= Вопросы и ответы, обсуждения 3 08.04.2012 07:44

Заявление об ответственности / Список мошенников

Часовой пояс GMT +4, время: 16:18.

Пишите нам: [email protected]
Copyright © 2024 vBulletin Solutions, Inc.
Translate: zCarot. Webdesign by DevArt (Fox)
G-gaMe! Team production | Since 2008
Hosted by GShost.net