Серверная авторизация ВКонтакте на базе протокола OAuth 2.0

В этом уроке описана Серверная авторизация для подключения сайтов (Authorization Code Flow).

Процесс авторизации сайта состоит из 4-х шагов:

Открытие окна браузера для аутентификации пользователя на сайте ВКонтакте.
Разрешение пользователем доступа к своим данным.
Передача сайту значения code для получения ключа доступа.
Получение сервером приложения ключа доступа access_token для доступа к API ВКонтакте.

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

1. Создаём Вконтакте приложение

Заходим на http://vk.com/editapp?act=create&site=1
Вводим название и выбираем «Веб-сайт».

В настройках приложения можно узнать его ID и Защищенный ключ.

2. Создаём файл настроек config.php
<?
// id приложения
define("CLIENT_ID", "743131");
// защищенный ключ
define("SECRET", "qweRtyuiop12asdFghjk");
// куда перенаправим пользователя после авторизации
define("OAUTH_CALLBACK", "callback.php");
// настройки доступа
define("SCOPE", "friends,photos,wall");
// путь к папке со скриптами
define("PATH", "http://flapps.ru/example/oauth20/");
// включим сессию
session_start();
?>

3. Файл callback.php, на который будет перенаправлен пользователь, после авторизации
<?
require_once("config.php");
// получили параметр code
if($_REQUEST['code']) {
    // получаем access_token
    $resp = file_get_contents('https://api.vk.com/oauth/access_token?client_id='.CLIENT_ID.'&code='.$_REQUEST['code'].'&client_secret='.SECRET);
    $data = json_decode($resp, true);
    if($data['access_token']){
        // запишем данные в сессию
        $_SESSION['access_token'] = $data['access_token'];
        $_SESSION['user_id'] = $data['user_id'];
        // переадресуем пользователя на нужную страницу
        header('Location: '.PATH.'index.php');
        exit();
    }
}
?>

Внимательно читайте официальную документацию! С момента публикации этой статьи могли произойти изменения. Например, сейчас (2012.11.04) написано, что при получении access_token нужно снова передать redirect_uri. В этом коде это не сделано, но тем не менее работает.

4. Файл redirect.php, который будет переадресовывать пользователя на страницу авторизации

<?
require_once("config.php");
//перенаправляем на авторизацию
//header('Location: http://api.vk.com/oauth/authorize?client_id=.CLIENT_ID.&redirect_uri=.PATH.OAUTH_CALLBACK.&display=popup&scope=.SCOPE.&response_type=code');
header('Location: '.PATH.'login.php');
?>

5. Файл login.php
<?
require_once("config.php");
$link = 'http://api.vk.com/oauth/authorize?client_id='.CLIENT_ID.'&redirect_uri='.PATH.OAUTH_CALLBACK.'&display=popup&scope='.SCOPE.'&response_type=code';
?>
<button onclick="location.href='<? echo $link ?>';">Войти ВКонтакте</button>

6. Файл index.php

В этом скрипте мы получим профиль пользователя
<?
require_once("config.php");
if(isset($_SESSION['access_token'])) {
    $uid = $_SESSION['user_id'];
 
    // получим профиль пользователя
    $resp = file_get_contents('https://api.vkontakte.ru/method/getProfiles?uids='.$uid.'&fields=photo_big&access_token='.$_SESSION['access_token']);
    $data = json_decode($resp, true);
    //print_r($data); // расскоментировать эту строчку, чтобы увидеть ответ сервера
    // выведем полученные данные
    echo 'Здравствуй, '.$data[response][0][first_name].' '.$data[response][0][last_name].'<br /><img src="'.$data[response][0][photo_big].'" />';
} else {
    require_once("redirect.php");
}
?>
Теги:
Серверная авторизация, ВКонтакте, OAuth 2.0
Добавлено: 17 Августа 2013 03:23:39 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...