Многие соцсети позволяют создавать приложения и через API получать данные пользователей, поэтому их использует для быстрой регистрации и авторизации на сайтах. Как проходит аутентификация, рассмотрим на примере VK.
- На сайте, пользователь нажимает на ссылку «Войти», открывается страница VK, где он разрешит приложению доступ к своим данным.
- После подтверждения браузер пользователя будет перенаправлен по адресу, указанному при открытии диалога авторизации. К URL добавляется GET-параметр с кодом авторизации.
- Скрипт выполняет ответный запрос с полученным кодом и ключом приложения для получения
access_token. - Полученный в ответе
access_token, скрипт использует для запроса к данным пользователя.
Регистрация приложения
Для начала нужно создать приложение на странице https://vk.com/editapp?act=create
В меню «Платформа» нужно указать – сайт, заполнить поля «адрес сайта» и «основной домен».

В настройках видим ID приложения и защищённый ключ, также нужно убедится что приложение включено и видно всем.

Ссылка для входа
Сформируем и выведем ссылку по которой пользователь даст разрешение на запрошенные действия.
$params = array( 'client_id' => 'ID приложения', 'redirect_uri' => 'https://example.com/oauth-vk.php', 'scope' => 'email', 'response_type' => 'code', 'state' => 'https://example.com/page-1' ); $url = 'https://oauth.vk.com/authorize?'.urldecode(http_build_query($params)); echo '<a href="'.$url.'">Войти через ВКонтакте</a>';
В redirect_uri указываем скрипт-обработчик, туда придет секретный код.
В параметре state можно передать URL текущей страницы, чтобы вернуть пользователя обратно.
При переходе по ссылке откроется страница:

Получение данных
После того как пользователь дал разрешение, он возвращается на redirect_uri, к URL добавляются GET-параметры:https://example.com/oauth-vk.php?code=1234567890&state=https://example.com/page-1
Далее запрашивается access_token (в ответе с токеном будет e-mail). После этого выполняется метод users.get, который возвращает ID, имя, фамилию и URL аватарки.
redirect_uriдолжен быть такой же, как в ссылке для входа.
<?php
if (!empty($_GET['code'])) {
$params = array(
'client_id' => 'ID приложения',
'client_secret' => 'Защищённый ключ',
'redirect_uri' => 'https://example.com/oauth-vk.php',
'code' => $_GET['code']
);
// Получение access_token
$data = file_get_contents('https://oauth.vk.com/access_token?' . urldecode(http_build_query($params)));
$data = json_decode($data, true);
if (!empty($data['access_token'])) {
// Получили email
$email = $data['email'];
// Получим данные пользователя
$params = array(
'v' => '5.52',
'uids' => $data['user_id'],
'access_token' => $data['access_token'],
'fields' => 'photo_big',
);
$info = file_get_contents('https://api.vk.com/method/users.get?' . urldecode(http_build_query($params)));
$info = json_decode($info, true);
echo $email;
print_r($info);
}
}Полученные данные пользователя
ivan_ivanov@gmail.com
Array
(
[response] => Array
(
[0] => Array
(
[first_name] => Иван
[id] => 12345678
[last_name] => Иванов
[photo_big] => https://vk.com/images/camera_200.png?ava=1
)
)
)Далее все завит от реализации сайта, пользователя можно добавить в БД или обновить его данные и авторизовать в системе.