Каковы основные принципы регистрации и авторизации через социальные сети OAuth2? — Хабр Q&A

Каковы основные принципы регистрации и авторизации через социальные сети oauth2?

Отвечу сам себе.

Здесь

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

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

Для авторизации, регистрации используется все та же таблица ‘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) Создается сессия с данными пользователя.

Похожее:  Настройка авторизации в Битрикс24 через Active Directory

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

ca4a4b263fd1424085988c9deaeb6d5b.png

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

'AND WHERE `auth_via`="native"'

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

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

Socialconf

Настройки приложения сохраним в ассоциативном массиве $socialConf следующего вида:

$socialConf[‘client_id’] = YOUR_CLIENT_ID;$socialConf[‘application_key’] = YOUR_APPLICATION_KEY;$socialConf[‘client_secret’] = YOUR_CLIENT_SECRET;$socialConf[‘redirect_uri’] = YOUR_REDIRECT_URI;

Далее

$usrArr

– ассоциативный массив данных пользователя.

Авторизация вконтакте

Первым делом давайте создадим страницу с ссылкой Авторизация, кликнув по которой пользователь будет перенаправлен на страницу авторизации ВКонтакте. Для этого создадим файл index.php:

Данная страница выглядит следующим образом:

Как Вы видите путь в ссылке Авторизация ведет на вспомогательный файл auth.php, который будет обрабатывать данные нашего скрипта. Теперь давайте создадим файл конфигурации config.php и добавим несколько констант:

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


Существует несколько способов авторизации через социальные сети.

Актуальность данных пользователя

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

Гостевой и личный профили пользователя

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

Задачи социальной интеграции

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


Под api (application programming interface) следует понимать набор команд (запросов, методов) и формат ответов,
предоставляемых соц. сетью разработчикам и описанных в документации.

Один redirect_uri для всех соц. сетей

Поскольку все соц. сети обращаются методом GET с параметром code на страницу авторизации redirect_uri
их необходимо как-то идентифицировать.

Плюсы для владельцев сайтов

Получение информации о пользователе

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

Разрешенный доступ к данным пользователя

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

Превращение анонимных посетителей в клиентов «со
знакомыми лицами»

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

Снижение стоимости техподдержки

Получение access_code

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

Кстати если во время авторизации возникли ошибки, то вместо параметра code, придет параметр error – код ошибки, вместе с ее описанием — error_description. Поэтому если мы действительно получили code, значит, запишем его в свойство класса и вызовем метод get_token(), который получит access_token. Теперь в класс Auth_Vk добавим код метода get_token():

Для получения access_token необходимо отправить запрос по адресу хранящимся в константе URL_ACCESS_TOKEN, и передать следующие параметры, используя метод GET:

client_id – идентификатор приложения;

client_secret – секретный код;

code – полученный code;

redirect_uri – здесь нужно указать тот же адрес, что и для получения code.

Запрос отправлять будем используя библиотеку CURL. При этом ответ от сервера ВКонтакте придет в формате строки JSON. Значит, используя функцию json_decode(), декодируем данную строку в объект. Объект мы получим следующего вида:

В случае ошибки мы получим следующее:

То есть мы получим объект у которого будет либо свойство access_token, либо свойство error. Поэтому, если мы получаем access_token – запишем его значение и идентификатор пользователя в соответствующие свойства класса и вернем TRUE, если же придет ошибка — запишем ее в сессию и вернем FALSE.

Получение данных пользователя

После того, как мы получили ключ доступа access_token – можно получить данные пользователя. Для этого в файл auth.php добавим следующий код (после вызова метода get_token()):

С использование api социальных сетей

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

С использованием api сторонних разработчиков

Можно использовать виджеты сторонних разработчиков, например uLogin или другие.

    Преимущества такого подхода:

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

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

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

Давайте своим клиентам выбор

Создание приложения в контакте

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

Заключение

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *