Social networks and communities
12 April 2011

Поддержка OAuth 2.0 платформой ВКонтакте

Вчера во ВКонтакте появилась поддержка открытого стандарта авторизации OAuth 2.0. Теперь интегрировать сайты и клиентские приложения с социальной сетью стало значительно проще.



На странице с документацией новой системы авторизации написано, что поддерживаются два типа авторизации: серверная и клиентская.

После прохождения процедуры авторизации внешнего сайта, сервер разработчика сможет в любое время выполнять запросы к API ВКонтакте без участия пользователя. Для того, чтобы получить “вечную” сессию, достаточно просто добавить параметр scope=offline при открытии диалога авторизации.

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

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

Например, для того, чтобы получить публичные статусы со стены пользователя, достаточно обратиться по адресу:

https://api.vk.com/method/wall.get?owner_id=1

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

Многие методы, такие как wall.get, стали открытыми и не требуют авторизации, поэтому я подготовил небольшой пример, демонстрирующий, как это может работать:

http://skdy.org/illarionov (в адресе Вы можете указать короткое имя или id любого пользователя.)

Простой пример авторизации ВКонтакте:


1) При клике на кнопку «Войти во ВКонтакте» нужно переадресовать на адрес вида:

http://api.vk.com/oauth/authorize?client_id=2271023&redirect_uri=http://skdy.org/illarionov&display=page

<button onclick="location.href='http://api.vk.com/oauth/authorize?client_id=2271023&redirect_uri=http://skdy.org/illarionov&display=page';">Войти ВКонтакте</button>

2) После того, как пользователь произвёл необходимое действие, он будет переадресован на указанный callback с параметром code или error и error_desc, если произошла ошибка.

3) После получения code, уже с серверной стороны Вы можете получить access_token, обратившись по адресу:

https://api.vk.com/oauth/token?client_id=2271023&code=xxx&client_secret=xxx, где в качестве client_secret нужно указать защищённый ключ, который Вы можете получить в форме редактирования приложения.

$code = $_GET['code'];
$secret = 'xxx';
$resp = file_get_contents('https://api.vk.com/oauth/token?client_id=2271023&code='.$code.'&client_secret='.$secret);
$data = json_encode($resp, true);
if ($data['access_token']) {
   // работа с API
}

* This source code was highlighted with Source Code Highlighter.

На этом всё, полученный access_token позволяет работать с API.

+99
21.6k 171
Comments 89
Top of the day