Авторизация через соц сети какие данные передаются. Социальные сети без регистрации

Есть полезная конкретная информация о технической реализации.

А если вкратце, то...

Для авторизации, регистрации используется все та же таблица "users". Вместе с обычной регистрацией и авторизацией, когда при регистрации (в самом простом виде) в таблицу "users" добавляются email, password и login пользователя, а при авторизации проверяется соответствие введенных login"а и password"а существующим в базе данных, аналогичным образом используется и регистрация/авторизация через социальные сети. Только в данном случае источником данных о пользователе для его регистрации является не непосредственный пользователь, который вводит данные в форму, а соц. сеть. Регистрация в данном случае достаточно прозрачная, т.е. не видна пользователю. Схема примерно следующая (без особенностей работы Oauth-протокола):


1) Пользователь выбирает вход через соц. сеть.
2) Происходит обращение к странице авторизации в этой соц. сети, если человек еще не авторизовывался там. После ввода данных, а если он ранее авторизовывался, происходит запрос на разрешение использования его данных.
3) Если человек отказывается, то на этом конец. Если дает согласие, то выполняется перенаправление на указанную в настройках Oauth страницу сайта.
4) У каждого пользователя в соц. сетях есть свой уникальный идентификатор, который можно запрашивать. Для своей таблицы "users" нужно добавить пару дополнительных полей (например, вот такие): auth_via (enum("native, "vk", "mailru", "...")) - для обозначения типа регистрации пользователя, и social_id - здесь будет храниться уникальный идентификатор в соц. сети. Если нужно хранить какие-то специфические данные этого пользователя из соц. сетей, то можно создать доп. поля для этих данных.
5) После того, как пользователь дал разрешение на использование его данных, необходимо запросить нужные данные от соц. сети, в т.ч. и идентификатор пользователя в соц. сети. Вот здесь и начинается невидимый процесс регистрации. Нужно проверить есть ли в БД пользователь с таким social_id, если нет, то вставляем social_id, данные пользователя из соц. сети, по необходимости, в БД. Все, пользователь зарегистрирован.
Если же данные о пользователе есть, то необходимо запросить актуальные данные из соц. сети, сравнить их с теми, что в базе и если они изменились, то обновить их и в своей базе данных, если нет, то просто переходим к следующему шагу.
6) Создается сессия с данными пользователя.

Таким образом, к существующей таблице "родной" регистрации пользователей сайта присоединяется, условно говоря, таблица, поля, необходимые для регистрации/авторизации через соц. сети., и друг-другу они не мешают.

Для пользователя, зарегистрированного из соц. сети пароля и логина, естественно, нет. Они нужны для авторизации. А т.к. пользователь авторизуется с помощью своих логина и пароля в соц. сети, то и указывать здесь нечего. И еще, можно при авторизации, к запросу проверки логина и пароля, добавить условие

"AND WHERE `auth_via`="native""

Чтобы исключить пользователей, зарегистрированных из соц. сетей.

Как видно, для каждого пользователя в таблице создается внутренний (внутрисайтовый, если так можно выразиться) первичный, автоинкрементный ключ. Соответственно, нет разницы для логики сайта между пользователем, зарегистрированным через соц. сеть и через сайт. Если говорить об интернет-магазине, то, для привязки заказов к пользователю, можно использовать единый, внутренний идентификатор ID.

В данной статье для примера рассмотрено десктоп-приложение на Java, однако общие принципы и схема будут аналогичными для любого другого языка.

Как происходит авторизация?

Авторизация ВКонтакте ничем не отличается от любой другой авторизации через сторонний сервер. Этот процесс отлично описал пользователь StackOverflow qnub :

  1. На сервисе (в данном случае ВК) необходимо зарегистрировать приложение и получить ключ API.
  2. После этого приложение (сайт) могут делать запрос личных данных пользователя у стороннего сервиса через этот самый API, для чего:
    • перенаправить пользователя (браузер пользователя посредством посылки ему HTTP-ответа 302 Redirect) по специально сформированной ссылке на сервис предоставляющий API;
    • пользователь произведёт там какие-то действия, предположительно авторизуется и разрешит доступ к данным.
  3. По завершении действий пользователь будет перенаправлен сторонним сервисом посредством всё того же 302 Redirect на URL переданный в параметрах специально сформированной ссылки .

Шаг первый. Зарегистрировать своё приложение и получить ключ

Этот шаг самый простой. Нужно перейти на страницу ВК для разработчиков: https://vk.com/dev - и нажать на кнопку «Создать приложение». Тип указываем как «Standalone-приложение», имя, естественно, указываем произвольное. После этого в разделе «Мои приложения» появится (что бы вы думали?) ваше приложение. Смело нажимайте «редактировать», затем переходите в раздел «Настройки» - там первой же строкой вы увидите надпись «ID приложения: 1234567 ». Эти цифры - всё, что вам нужно запомнить для авторизации.

Заметьте, что нет никакого смысла скрывать ID приложения - он публично показывается, например, при отправке сообщения на стену через это приложение. Ни токены, ни любую другую информацию украсть, используя ID, нельзя. В общем-то, вы можете использовать даже ID моего приложения (если вам нужно написать небольшой скрипт для себя).

Шаг второй. Формирование специальной ссылки

Далее вам нужно направить пользователя по специально сформированному адресу (её упоминания выделены жирным цветом в первом разделе статьи), где он подтвердит, что хочет разрешить вашему приложению выполнять какие-то действия со своим аккаунтом. Как же формируется эта ссылка?

Этот процесс подробно описан в документации . Однако, если вы обратились к этой статье, я предполагаю, что вам не хватило информации в документации, и поэтому перескажу всё своими словами. Ссылка имеет следующий вид: хост?параметры. Параметры имеют вид нескольких пар вида ключ=значение разделённых символами & .

Хост всегда остаётся неизменным: https://oauth.vk.com/authorize . Набор параметров так же неизменен:

  • client_id . Здесь стоит указать те самые цифры, которые мы добыли в первом шаге.
  • redirect_uri . Адрес, по которому будет перенаправлен пользователь. Для Standalone приложений это только https://oauth.vk.com/blank.html .
  • display . Этот параметр отвечает за то, как будет показываться страница авторизации. Доступно три варианта: page , popup и mobile . Если не уверены, используйте page .
  • scope . В этом параметре вам следует через запятую перечислить параметры доступа, которые вам необходимы. Полный список доступных параметров приведён на соответствующей странице документации. Обращаю ваше внимание, что можно не указывать вообще ничего и просто не писать этот параметр. Чтобы узнать, какие опции доступа вам нужны посмотрите в документацию методов , которые вы собираетесь использовать.
  • response_type . Указываем token и идём дальше.
  • v . Версия API. Актуальная – 5.59 .

https://oauth.vk.com/authorize?client_id=1&display=page&redirect_uri=http://example.com/callback&scope=friends&response_type=token&v=5.59

Шаг третий. Что дальше?

http://REDIRECT_URI#access_token=TOKEN 3&expires_in=TIME &user_id=ID

Нас интересует TOKEN . Как же направить пользователя на страницу из Java-приложения и как получить адрес страницы, на которую его перенаправит ВК (чтобы извлечь из неё токен)? Существует два способа.

Если вы решили пойти по этому пути, то вы просто открываете браузер системы по умолчанию с полученной выше ссылкой, а пользователю каким-то образом сообщаете, что он должен скопировать из URL токен и вставить его в какое-то поле. Понятно, что у этого метода отвратительный UX, однако его можно реализовать легко и быстро. Вполне подойдёт, если вы пишете приложение для себя - чтобы скачать музыку или получать уведомления. Реализуется он следующим образом:

Public String askToken(String link) throws IOException, URISyntaxException{ //Opens link in default browser Desktop.getDesktop().browse(new URI(link)); //Asks user to input token from browser manually return JOptionPane.showInputDialog("Please input access_token param from browser: "); }

Буржуазный, через веб-компоненты

Если вы решили пойти по этому пути, то вам потребуется использовать какую-либо стороннюю GUI-библиотеку (или по крайней мере JavaFX), у которой в арсенале есть свой компонент браузера. Над таким бразуером ваша программа будет иметь полную власть, и вы сможете извлечь адрес, на который вас перенаправил ВК, программными средствами. На JavaFX это можно реализовать следующим образом:

Import javafx.application.Application; import javafx.beans.value.ChangeListener; import javafx.beans.value.ObservableValue; import javafx.scene.Scene; import javafx.scene.web.WebEngine; import javafx.scene.web.WebView; import javafx.stage.Stage; public class Main extends Application{ public static final String REDIRECT_URL = "https://oauth.vk.com/blank.html"; public static final String VK_AUTH_URL = ""; //TODO!!! public static String tokenUrl; public static void main(String args){ System.out.println(Main.getTokenUrl()); } public static String getTokenUrl(){ launch(Main.class); return tokenUrl; } @Override public void start(Stage primaryStage) throws Exception { final WebView view = new WebView(); final WebEngine engine = view.getEngine(); engine.load(VK_AUTH_URL); primaryStage.setScene(new Scene(view)); primaryStage.show(); engine.locationProperty().addListener(new ChangeListener(){ @Override public void changed(ObservableValue observable, String oldValue, String newValue) { if(newValue.startsWith(REDIRECT_URL)){ tokenUrl=newValue; primaryStage.close(); } } }); } }

Заключение

Таким образом, мы научились получать access token ВКонтакте, с помощью которого можно вызывать методы API. Если эта статья вызовет у сообщества интерес, в следующей статье я опишу, как вызывать те или иные API-методы с помощью токена, как проверять токен на валидность (метод secure.checkToken() , конечно), и напишу какое-нибудь демонстрационное приложение, например, для сохранения всей музыки из плейлиста на компьютер. Кстати, не стоит забывать, что на самом деле всё придумано до нас, и уже есть библиотеки для работы с VK API почти для любого языка. У нас есть , в которой мы постарались собрать лучшие из них.

Если есть какие-то идеи или вопросы - добро пожаловать в комментарии (я их читаю и всем отвечаю). Так же вопросы можно задать

Итак, приступим к технический части. Для этого мы создадим и настроим новое приложение в социальной сети. После чего напишем класс, который будет взаимодействовать с API «ВКонтакте»: устанавливать соединение и получать данные о пользователе. В результате проделанных действий, мы сможем авторизовать пользователя у себя на сайте.

Создаём новое приложение «ВКонтакте»

Перед тем, как писать код, нам нужно зарегистрировать новое приложение. Делается это просто, заходим в свой профиль, переходим в раздел приложения и в нем кликаем на кнопку «Управление». В этом разделе вы увидите список всех приложений, которыми вы пользуетесь и кнопку «Создать приложение», жмём по ней. Заполняем название и выбираем пункт «Веб-сайт».

После этого появятся два новых поля, которые также заполняем и жмём «Подключить сайт». В следующем окне вам останется подтвердить регистрацию.


Вот так просто и быстро регистрируется новое приложение «ВКонтакте». Теперь переходим в настройки и копируем ID приложения и защищенный ключ в блокнот. На этом работа с социальной сетью заканчивается.


Пишем класс для работы с API

Перед тем, как написать класс, мы определим его логику, которая будет содержать 3 свойства и 3 метода (включая конструктор).

Class VKAuth{ public $settings = array(); public $auth_status = false; public $user_info = array(); public function __construct($settings){ } public function auth($code){ } public function get_link(){ } }

  • settings – отвечает за хранение настроек для подключения к API;
  • auth_status – статус аутентификации, если пользователь пройдет, то значение изменяться на true;
  • В конструкторе мы будем принимать настройки для подключения, и сохранять в переменную settings;
  • auth – метод, который будет производить соединение с API и вытягивать нужные нам данные (принимает код для получения ключа доступа);
  • get_link – метод генерирующий путь ссылки для аутентификации.

Теперь давайте рассмотрим каждый из методов подробно:

1. Конструктор:

Как и было раннее оговорено, мы принимаем настройки и сохраняем их в переменную settings. Для надёжности проверяем наличие их при помощи функции isset().

Public function __construct($settings){ if(isset($settings["client_id"], $settings["client_secret"], $settings["redirect_uri"])){ $this->settings = $settings; } }

С начала мы проверяем наличие переменных code и settings. Если всё нормально, то формируем первый запрос, который будет состоять из массива данных, обёрнутых в две функции.

urldecode() – декодирует %## символы в url.

http_build_query() – генерирует строку запроса.

После того, как мы обратимся по сформированному адресу, нам в ответ придет json строка. Для удобства, получаемые данные мы преобразуем в массив, делается это путем передачи у функции json_decode() второго параметра true. Данный массив будет содержать три ячейки: access_token, expires_in и user_id.

Идём дальше, проверяем наличие токена и формируем новый запрос на получение данных пользователя. В нашей функции мы будем сохранять: id, имя, фамилию и аватарку. Для этого через запятую в ячейку fields поместим строку с параметрами «uid,first_name,last_name,photo_100». Какие ещё данные пользователя можно получить описаны в документации объекта user . Обращаемся по новой ссылке и получаем ответ в виде массива. Проверяем наличие принятых данных и сохраняем их в переменную user_info (принятый массив является многомерным, данные будут храниться в нулевой ячейке response), а так же значение auth_status меняем на true и возвращаем true.

Public function auth($code){ if($code && $this->settings){ $query = urldecode(http_build_query(array("client_id" => $this->settings["client_id"], "client_secret" => $this->settings["client_secret"], "code" => $code, "redirect_uri" => $this->settings["redirect_uri"]))); $token = json_decode(file_get_contents("https://oauth.vk.com/access_token?".$query), true); if(isset($token["access_token"])){ $query = urldecode(http_build_query(array("uids" => $token["user_id"], "fields" => "uid,first_name,last_name,photo_100", "access_token" => $token["access_token"]))); $this->user_info = json_decode(file_get_contents("https://api.vk.com/method/users.get?".$query), true); if(isset($this->user_info["response"]["uid"])){ $this->user_info = $this->user_info["response"]; $this->auth_status = true; return true; } } } return false; }

Первым делом проверяем наличие настроек, а далее формируем путь для ссылки. Функции, которые используются, описаны выше. Когда пользователь нажмёт на ссылку с этим путём, то его перебросит на страницу c параметром code в адресной строке – код для получения токена.

Public function get_link(){ if($this->settings){ $query = urldecode(http_build_query(array("client_id" => $this->settings["client_id"], "redirect_uri" => $this->settings["redirect_uri"], "response_type" => "code"))); return "https://oauth.vk.com/authorize?".$query; } return false; }

Простая авторизация

На этом этапе – всё довольно рационально. После того как вы подключите класс к файлу, останется получить экземпляр VKAuth, передав ему настройки. Ниже описываем простой обработчик, который отлавливает переменную $_GET и проверяем аутентификацию.

Require_once("VKAuth.php"); $vk = new VKAuth(array("client_id" => "ID_приложения", "client_secret" => "защищенный_ключ", "redirect_uri" => "адрес_сайта")); if(isset($_GET["code"])){ if($vk->auth($_GET["code"])){ // Делаем свои дела } }

Далее, чтобы произвести авторизацию, вам нужно будет проверить наличие пользователя у себя в базе данных и, если его нет, то добавить. В противном случае обновить его данные (перед обновлением желательно проверить - изменились ли они). Касательно базы данных обычно добавляют два поля: тип авторизации и id пользователя в социальной сети. Вот так осуществляется аутентификация и авторизация через социальную сеть «ВКонтакте».

В архиве вы найдёте готовый пример работы с классом VKAuth, где выводятся данные пользователя.

Многие сайты для доступа к расширенному функционалу предлагают зарегистрироваться и войти на сайт под своими учетными данными. Однако как показывает практика проходить процедуру регистрации, которая часто бывает слишком мудреная, желают далеко не все.

Причин, по которым пользователи отказываются от стандартной регистрации на сайте, можно насчитать не один десяток, однако из них можно выделить основные:

  • Процесс регистрации занимает много времени
  • Пользователи не желают оставлять свои персональные данные
  • Сложность процесса регистрации, секретные ключи, капча могут отпугнуть обычного пользователя
  • Технические проблемы на стороне сайта, при которых процесс регистрации просто невозможен. В таком случае пользователи, у которых не получилось зарегистрироваться с первого раза, как правило, второй попытки делать уже не будут.

Поведение пользователей вполне обосновано, никто не желает тратить свое время на регистрацию для того чтобы например оставить комментарий на сайте или увидеть скрытое содержимое сомнительного характера.

Как быть в такой ситуации, как упростить процесс регистрации и авторизации на сайте и избежать подобных проблем? Вот тут на помощь приходят социальные сети, при помощи которых можно в считанные секунды войти на сайт, не прибегая к утомительному заполнению регистрационной формы. Кроме того пользователям не придется запоминать ни свой логин, ни пароль, ни какую либо другую информацию.

Способы авторизации через социальные сети для владельцев сайтов

Для организации авторизации на сайте через соцсети можно воспользоваться специальными сервисами, которые могут быть как платными, так и бесплатными, а так же использовать на своем сайте специальные расширения. А можно пойти другим путем и написать собственное расширение, если Вы знакомы с языком PHP.

Вариантов организации входа на сайт через социальные сети хватает.

Сервисы авторизации

Использование сервисов авторизации наиболее предпочтительный способ для начинающих веб-разработчиков. Все что потребуется от владельца сайта это разместить на нем предложенный тем или иным сервисов скрипт. Или же воспользоваться специальным расширением (плагином) разработанным для множества популярных систем управления контентом.

Наиболее популярные и распространенные сервисы авторизации - Slogin, ULogin и Loginza. Оба этих сервиса предлагают плагины практически для всех CMS, что делает их еще более привлекательными для новичков.

Не лишним будет отметить, что ранее сервис авторизации Slogin позволял работать с социальными сетями исключительно напрямую, однако уже сейчас данный продукт вырос с обычного компонента в полноценный сервис авторизации. Кроме того у владельцев сайтов использующих компонент Slogin остался выбор - работать с соцсетями напрямую либо через сервис.

Преимущества:

  • Простота использования и интеграции
  • После установки скрипта или плагина на сайт вы получаете возможность авторизации пользователей практически со всех известных социальных сетей, нет необходимости регистрации своего приложения (сайта) отдельно в каждой сети.

Недостатки:

  • Все данные по авторизовавшимся пользователям передаются из социальной сети не вам, а выбранному вами сервису.
  • Частичное использование преимуществ социальных сетей, нет возможности привязать пользователя к определенной группе и т.п.

Компоненты и создание собственного приложения в социальной сети

Данный вариант более предпочтительный для тех, кто хочет получить максимум от авторизации через социальные сети. В этом случае уже не будет посредников, которые будут получать данные пользователя, все эти данные будут передаваться соцсетью напрямую на ваш сайт.

К недостаткам данного метода можно отнести создание собственного приложения в каждой социальной сети. Другими словами вам придется регистрировать свой сайт в той социальной сети, через которую вы хотите предоставить возможность входа на сайт.

Достоинства данного метода очевидны - все данные пользователя передаются уже сразу на ваш сайт, после регистрации своего приложения (создания группы в социальных сетях) вы получаете дополнительные преимущества (дополнительный трафик, возможность монетизации группы и так далее).

Безопасна ли авторизация через социальные сети

Многие пользователи относятся с недоверием к такому роду авторизации - боятся, что их данные могут украсть и тем самым взломать ту или иную социальную сеть. Однако смею вас заверить, что авторизация через социальные сети совершенно безопасна , никто не украдет ваши данные. Чтобы в этом убедиться, давайте разберем процесс авторизации, что в это время происходит, и какие данные передаются.

Когда пользователь нажимает на кнопку социальной сети, происходит открытие дополнительного окна, а в это время сайт обращается к социальной сети и запрашивает разрешение на передачу личных данных. Социальная сеть в свою очередь по средствам вновь открывшегося окна просит подтвердить пользователя свое согласие на передачу общедоступной информации. Только в том случае если пользователь дает свое согласие общедоступные данные передаются на сайт и записываются в его профиль.

Еще раз отмечу, что передаваемые данные не содержат ни логина пользователя из социальной сети, ни его пароля , передается лишь общедоступная информация, такая как имя, фамилия, возраст, фотография и некоторые другие данные. Набор открытых данных передаваемых сайту отличаются в зависимости от социальной сети.

Таким образом, можно сделать вывод, что авторизация через социальные сети совершенно безопасна , я бы даже сказал гораздо более безопасная стандартной регистрации на сайте.

Плюсы и минусы авторизации через социальные сети

  • Пользователям сайта нет необходимости заполнять регистрационные данные и придумывать новые логин и пароль
  • Вход на сайт по средствам социальных сетей происходит гораздо быстрее
  • Получение данных о пользователе

Минус только один - незначительная потеря производительности сайта, за счет использования дополнительных скриптов (либо плагинов) и обмена информацией между сайтами.

Я говорил о том, что сайт нужно сделать максимально удобным для пользователей, также я упоминал о том, что нужно облегчить людям вход на сайт, сделав возможность авторизации через социальные сети. Как и обещал, сегодня я подготовил для Вас мануал, с помощью которого Вы без труда научитесь прикручивать эту фишку к своим сайтам.

Сегодня Вы узнаете, как сделать авторизацию на сайте через такие популярные сервисы как Вконтакте, Facebook и Tweeter. Добавлять авторизацию через эти соц. сети мы будем с помощью специальных сервисов: Loginza и его аналога uLogin. Показывать буду на примере сайта wordpress, посмотреть как это выглядит Вы можете на моем тестовом блоге.

Авторизация через социальные сети с помощью uLogin

Сервис доступен и понятен даже рядовому пользователю интернета. Поддерживает все известные системы управления контентом и многие социальные сети (в том числе одноклассники, mail и Google +). Для установки авторизации переходим на сервис , выбираем нужную платформу (в данном случае wordpress) и кликаем по “ссылка на страницу плагина”:

Нам предложат скачать плагин на компьютер, выбираем папку, куда хотим сохранить архив и скачиваем. Затем распаковываем архив в любую папку на диске и с помощью любого файлового менеджера (я, например, пользуюсь Total Commander’ом) загружаем папку на сайт в директорию wp-content/plugins.

Теперь остается активировать плагин в админке. Переходим в админку, раздел плагины, напротив “uLogin” жмем «активировать». Все! Теперь на нашем вордпресс сайте появилась возможность авторизации и комментирования через самые известные социальные сети:

Если в админке зайти в раздел “плагины”, то там можно увидеть подпункт uLogin, который отвечает за настройку формы:

На странице с настройками можно изменить отображение соц. сетей на панельке формы, меню услуг, запрашиваемые поля, дополнительные поля и текст для входа:

Я здесь ничего не трогал, но как я понял все изменения нужно вносить на английском. В принципе можно поиграться с данными параметрами, однако плагин и без того прекрасно функционирует. Если Вы захотите прикрутить авторизацию к сайтам на других платформах, то в каждом архиве есть файлик Readme, в котором пошагово расписана установка плагина для конкретных CMS.

Как видим, сложного ничего нет, и вся установка займет у Вас всего пару минут.

& lt;? php echo ulogin_panel() ; ?& gt;

Установка авторизации через социальные сети с помощью сервиса Loginza

Данный сервис также интегрирован с самыми популярными соц. сетями, а также имеет гибкую настройку окна авторизации. Для начала переходим на сервис и авторизуемся. Сделать это можно с помощью любой социальной сети. После входа Вы попадете на страницу своего аккаунта, где и будет проводиться настройка формы:

Переходим в раздел “мой виджет Loginza” и добавляем нужный сайт:

Для работы с сайтом необходимо подтвердить права на него. Кликаем по кнопке “Подтвердить права”, нас попросят вставить на главную страницу специальный тег:

После подтверждения прав мы можем спокойно настраивать окно по своему желанию:

На странице “Настройки” размещены Ваш персональный ID и Секретный ключ, они нужны для настройки виджета после установки его на сайт:

На странице “Оформление” можно настроить внешний вид окна с помощью файла style.css. Если Вы разбираетесь в данном файле, то можете поэкспериментировать, если не разбираетесь, то лучше оставьте все без изменений. На вкладке “Просмотр” можно увидеть результат своей работы:

Раздел “Статистика” показывает количество авторизованных пользователей с помощью данного виджета:

На вкладке “HTML код” размещен соответственно html код данной формы.

Выбираем “Плагин WordPress” и скачиваем его к себе на компьютер. С помощью любого файлового менеджера закидываем плагин в директорию wp-content/plugins. Активируем плагин, и в админке у нас появится раздел “Loginza”, заходим в него.