Для одного проекта понадобилось сделать
Задачи социальной интеграции
Сейчас большинство пользователей интернета имеют аккаунты в социальных сетях (одноклассники, фэйсбук, вконтаке и другие). Эти социальные сети предоставляют свой api для авторизации на сторонних сайтах. Получается очень удобно имея один аккаунт в социальной сети, им же подписываться на других ресурсах и постить понравившийся контент. Привязка вашего сайта к социальным сетям сделает его более ‘дружелюбным’ к пользователям, избавит их от утомительной процедуры регистрации и подтверждения E-Mail.
Под api (application programming interface) следует понимать набор команд (запросов, методов) и формат ответов, предоставляемых соц. сетью разработчикам и описанных в документации.
Авторизация через социальные сети
Существует несколько способов авторизации через социальные сети.
С использованием api сторонних разработчиков
Можно использовать виджеты сторонних разработчиков, например uLogin или другие.
PHP — 100% Защищённая Регистрация и Авторизация за 30 минут. От профи.
Виджет uLogin позволяет авторизовать пользователей почти через любую социальную сеть
-
Преимущества такого подхода:
- Широкий выбор социальных сетей для авторизации. Нет необходимости собственноручно регистрировать и настраивать ваше приложение в социальной сети, можно даже не заводить собственный аккаунт
- Формат ответа при авторизации будет содержать набор стандартных заголовков полей, нет необходимости кастомизировать скрипт авторизации для каждой социальной сети. Вам не придется изучать документацию по методами работы с api
-
Недостатками будут:
- Проблемы с api сторонних разработчиков, как недоступность их серверов, изменение формата ответа, обязательно скажутся на работе скрипта авторизации на вашем сайте и на ваших пользователях.
- api самих социальных сетей дают возможность получить гораздо больше информации о пользователях, чем позволяют сторонние разработки
- Нет гарантии что информация пользователей будет передаваться только вам и не будет использована разработчиками в своих интересах. Нет гарантии что вам дадут достоверную информацию о пользователях.
- Для передачи данных в совокупности потребуется выполнить большее количество запросов, что скажется на времени работы скрипта.
С использование api социальных сетей
- При регистрации вашего приложения на Одноклассниках, Фэйсбуке, ВКонтакте ему будет назначен client_id приложения и специальные ключи доступа client_secret. В настройках необходимо указать redirect_uri — адрес страницы, которая будет обрабатывать code подтверждения.
- На любой странице вашего сайта вы размещаете ссылку с client_id, как в документации на api. При клике на ссылку, api соответствующей социальной сети загрузит виджет (окно) на javascript с предложением к пользователю авторизоваться и разрешить доступ вашему приложению к его профилю. Важно, что вводимые логин и пароль не передаются вашему приложению, они будут переданы к соц. сети. Сам client_id приложения, как и ссылка авторизации, не являются секретными.
- После того как пользователь введет логин и пароль и разрешит авторизацию, на страницу, которую вы указали в настройках своего приложения в параметре redirect_uri, api социальной сети выполнит запрос с параметром code методом GET. Этот параметр обрабатывается и служит вашему приложению сигналом для начала авторизации и получения access_token
- Далее, в целях безопасности, ваше приложение должно выполнить запрос на получение access_token с использованием специального ключа доступа client_secret и кода подтверждения code полученного на предыдущем шаге. client_secret должен храниться в секрете и быть известен только вам. Ответ вернется в формате json, легко парсится на php, позволяет определить возникшие на этом этапе ошибки
- Если процесс получения access_token прошел успешно, используя его вы можете совершать запросы к методам api социальной сети для получения данных пользователя. Ответ также возвращается в формате json, содержит данные или коды ошибок.
socialConf
Настройки приложения сохраним в ассоциативном массиве $socialConf следующего вида:
АВТОРИЗАЦИЯ В АККАУНТЕ VK ЧЕРЕЗ PYTHON
$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 — ассоциативный массив данных пользователя.
Авторизация через odnoklassniki
- Переходим по ссылке https://apiok.ru/dev/app/create и регистрируем свое приложение (заполняем форму), получаем client_id приложения и ключи доступа.
- Размещаем ссылку для авторизации пользователя на вашем сайте.
href=’https://connect.ok.ru/oauth/authorize?client_id=’.$socialConf[‘client_id’].
‘response_type=codelayout=w $_GET[‘code’],
‘client_id’ => $socialConf[‘client_id’],
‘client_secret’ => $socialConf[‘client_secret’],
«redirect_uri» => $socialConf[‘redirect_uri’],
«grant_type» => «authorization_code»
)
);
$opts = array(‘http’ =>
array(
‘method’ => ‘POST’,
‘header’ => ‘Content-type: application/x-www-form-urlencoded’,
‘content’ => $postReq
)
);
$context = stream_context_create($opts);
$tokenReq = file_get_contents(‘https://api.ok.ru/oauth/token.do?’, false, $context);
$tokenArr = json_decode($tokenReq, true);
//Обрабатываем ошибки
if(isset($tokenArr[‘access_token’]) and $tokenArr[‘access_token’]!=null) //получаем данные пользователя
>
$secret_key = MD5($tokenArr[‘access_token’] . $socialConf[‘client_secret’]);
$sig = MD5(«application_key=» . $socialConf[‘application_key’] . «format=jsonmethod=users.getCurrentUser» . $secret_key);
$usrReq = file_get_contents(«https://api.ok.ru/fb.do?
application_key=» . $socialConf[‘application_key’] . » .
«sig=» . $sig . «> Авторизация через facebook
href=’https://www.facebook.com/dialog/oauth?client_id=’.$socialConf[‘client_id’].
‘response_type=code’
$tokenReq = file_get_contents(«https://graph.facebook.com/oauth/access_token?client_id .$socialConf[«redirect_uri»].»code access_token»]) and $tokenArr[«access_token»]!=null) //получаем данные пользователя
>
$usrReq=file_get_contents(«https://graph.facebook.com/me?access_token access_token»].
«);
$usrArr = json_decode($usrReq, true);
//Обрабатываем ошибки
if(isset($usrArr[«id»]) and $usrArr[«id»]!=null) >
Авторизация через vkontakte
https://oauth.vk.com/authorize?client_id=’.$socialConf[‘client_id’].
‘redirect_uri=’.$socialConf[‘redirect_uri’].
‘response_type=codehttps://oauth.vk.com/access_token?
client_id redirect_uri ]) and $tokenArr[«access_token»]!=null) //получаем данные пользователя
>
Если вы сохраняете данные профиля пользователя в базу данных для последующего использования, например даете ссылку на профиль в коментариях, то их необходимо переодически обновлять, можно при каждой авторизации.
Гостевой и личный профили пользователя
Приложение может получить доступ к информации гостевого или личного профилям пользователя в зависимости от своих настроек и разрешений пользователя. В гостевом профиле публикуется минимум данных, доступных всем. В личном профиле публикуется информация доступная друзьям. Некоторые данные (день рождения, E-Mail и другие) нельзя получить без разрешений к личному профилю или открытия их для доступа всем.
Ссылка на станицу по id в социальной сети
- ВКонтакте: https://vk.com/idYOUR_id
- Одноклассники: https://ok.ru/profile/YOUR_uid
- Фэйсбук: к сожалению зная id пользователя получить ссылку на его страницу не получиться, теперь для этого требуется доступ к личному профилю пользователя.
Один redirect_uri для всех соц. сетей
Поскольку все соц. сети обращаются методом GET с параметром code на страницу авторизации redirect_uri их необходимо как-то идентифицировать.
if (isset($_GET[‘state’]) and $_GET[‘state’]==’ok’) <
//В одноклассниках есть параметр state вместе с code.
>else <
if (strlen($_GET[‘code’]) Комментарии: 1 Ответы: 0
+0
-0
Источник: rightjoint.ru