1. Главная страница » Компьютеры » Oauth vk com что такое

Oauth vk com что такое

Автор: | 16.12.2019

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

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

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

Для авторизации пользователя необходимо перенаправить его браузер по адресу:
https://oauth.vk.com/authorize, передав следующие параметры:

client_id Обязательно Идентификатор Вашего приложения.
redirect_uri Обязательно Адрес, на который будет переадресован пользователь после прохождения авторизации (домен указанного адреса должен соответствовать основному домену в настройках приложения и перечисленным значениям в списке доверенных redirect uri — адреса сравниваются вплоть до path-части).
display Обязательно Указывает тип отображения страницы авторизации. Поддерживаются следующие варианты:

  • page — форма авторизации в отдельном окне;
  • popup — всплывающее окно;
  • mobile — авторизация для мобильных устройств (без использования Javascript)

Если пользователь авторизуется с мобильного устройства, будет использован тип mobile.

scope Битовая маска настроек доступа приложения, которые необходимо проверить при авторизации пользователя и запросить, в случае отсутствия необходимых.
response_type Тип ответа, который Вы хотите получить. Укажите code, чтобы осуществлять запросы со стороннего сервера.
v Версия API, которую Вы используете. Актуальная версия: 5.103.
state Произвольная строка, которая будет возвращена вместе с результатом авторизации.

Пример запроса:

Если пользователь не вошел на сайт, то в диалоговом окне ему будет предложено ввести свой логин и пароль.

После успешного входа на сайт пользователю будет предложено авторизовать приложение, разрешив доступ к необходимым настройкам, запрошенным при помощи параметра scope. Полный список настроек доступен в разделе прав доступа приложений.

Параметр code может быть использован в течение 1 часа для получения ключа доступа к API access_token с Вашего сервера.

В случае возникновения ошибки браузер пользователя будет перенаправлен с кодом и описанием ошибки:

Для получения access_token необходимо выполнить запрос с Вашего сервера на https://oauth.vk.com/access_token, передав следующие параметры:

client_id Обязательно Идентификатор Вашего приложения
client_secret Обязательно Защищенный ключ Вашего приложения (указан в настройках приложения)
redirect_uri Обязательно URL, который использовался при получении code на первом этапе авторизации. Должен быть аналогичен переданному при авторизации.
code Обязательно Временный код, полученный после прохождения авторизации.

Пример запроса:

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

Если у пользователя указан email, а приложением были запрошены соответствующие права, сервер также вернет email пользователя.

В случае ошибки будут переданы параметры error и error_description.

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

Для начала немного терминов. В OAuth авторизации выделяются три роли – клиент, сервер и владелец ресурса (пользователь).
Клиент – это сервис, которому предоставляется доступ к данным, сервер – это сервис, который хранит данные, а владелец ресурса – это пользователь, который предоставляет свои данные.
Или на примере: Вы сделали на своем сайте авторизацию через ВКонтакте. На этот сайт зашел пользователь и хочет авторизоваться. В данном случае клиентом является Ваш сайт, сервером – ВКонтакте, а владельцем ресурса – этот самый пользователь.

Еще один термин, с которым придется часто сталкиваться – это токен. Токен в нашем случае – это средство авторизации в OAuth запросах, текстовый ключ, который предоставляет ограниченный временный доступ к данным владельца ресурса на сервере. Нередко используется связка из нескольких токенов.

Способы OAuth авторизации на разных серверах отличаются, но схема у них одна:

  1. Клиент отправляет на сервер запрос на получение токена авторизации. В запросе используются идентификационные данные клиента.
  2. После распознавания клиента сервер отдает токен авторизации.
  3. Клиент, используя этот токен, перенаправляет пользователя на сервер
  4. На сервере пользователь авторизовывается и подтверждает доступ клиенту к своим данным.
  5. После авторизации и подтверждения пользователь перенаправляется к клиенту, передавая при этом дополнительные токены (обычно один или два) доступа (обычно в GET-параметрах)
  6. Используя токен доступа клиент обращается к серверу за данными и получает их уже без подтверждения пользователем. Обычно доступ к данным по одному и тому же токену ограничивается лишь по времени, некоторые серверы дополнительно ограничивают количество запросов.

Шаги 1 и 2 – редкость, обычно идентификационные данные клиента передаются серверу вместе с перенаправлением пользователя на авторизацию вместо токена авторизации. Идентификационные данные клиенту выдаются при регистрации сайта на сервере, зачастую в виде приложения.

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

Регистрация приложения

Скорее всего Вы уже зарегистрированы в соц. сети ВКонтакте, если нет, то Вам придется это сделать. Указывать номер телефона при регистрации обязательно. Переживать не стоит — никакой смс-рассылки от этих сервисов не приходит.
Далее необходимо создать приложение. (Скриншоты были сделаны в апреле 2015, с той поры интерфейс мог измениться)

После смс-подтверждения создания приложения оно, как можно догадаться, создаётся и Вы попадаете на страницу её редактирования. Всю информацию и иконки желателно добавить, но больше всего нас там интересуют id приложения и защищённый ключ— это и есть идентификационные данные нашего сайта:

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

Что и как

Для удобства создаём класс, в него пишем константы (скачать конечный результат можно ниже из раздела "дополнительно"):

class OAuthVK <
const APP_ >= 1234567 ; //ID приложения
const APP_SECRET = ‘sometestappsecret’ ; //Защищенный ключ
const URL_CALLBACK = ‘http://example.com/oauth/vk.php’ ; //URL, на который произойдет перенаправление после авторизации
>

Первым делом нужно авторизовать пользователя, поэтому нужно перенаправить его на сайт ВКонтакте. Добавляем метод в имеющийся класс:

В поле scope передаются запрашиваемые права доступа приложения. Для считывания основной информации достаточно offline . Но если нужно большее, то их можно перечислять через запятую:

Небольшое пояснение: redirect() — это метод, реализующий перенаправление. Для удобства в этом примере он вынесен в класс Utils

class Utils <
public static function redirect ( $uri = » )
<
header ( "HTTP/1.1 301 Moved Permanently" ) ;
header ( "Location: " . $uri , TRUE , 302 ) ;
exit ;
>
>

После авторизации и подтверждения доступа пользователь переадресовывается на адрес URL_CALLBACK ?code=xxx . Теперь нужно по переданному нам коду взять токен и запросить данные пользователя. Если же пользователь отклонил запрос или возникла ошибка, то он перенаправится на адрес URL_CALLBACK с кодом и описанием ошибки, например URL_CALLBACK?error=inval > .

То есть, логику можно разместить в эти условия:

if ( ! empty ( $_GET [ ‘error’ ] ) ) <
// Пришёл ответ с ошибкой.
> elseif ( empty ( $_GET [ ‘code’ ] ) ) <
// Самый первый запрос. Отправляем пользователя на авторизацию
OAuthVK::goToAuth();
> else <
// Ответ от ВК пришёл удачный
// Запрос токена и данных пользователя
>

class OAuthVK <
.
const URL_ACCESS_TOKEN = ‘https://oauth.vk.com/access_token’ ;
private static $token ;
public static $userId ;
.
public static function getToken ( $code ) <
$url = self :: URL_ACCESS_TOKEN .
‘?client_ > . self :: APP_ID .
‘&client_secret=’ . self :: APP_SECRET .
‘&code=’ . $_GET [ ‘code’ ] .
‘&redirect_uri=’ . urlencode ( self :: URL_CALLBACK ) ;

if ( ! ( $res = @ file_get_contents ( $url ) ) ) <
return false ;
>

$res = json_decode ( $res ) ;
if ( empty ( $res -> access_token ) || empty ( $res -> user_id ) ) <
return false ;
>

self :: $token = $res -> access_token ;
self :: $userId = $res -> user_id ;

Объект $res при удачном запросе будет содержать такие поля:

stdClass Object
(
[ access_token ] => xxx
[ expires_in ] => 43200
[ user_ >] => xxx
)

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

Далее по токену и user_id остается запросить данные пользователя. Все запросы к API ВКонтакте выполняются по такому адресу:
https://api.vk.com/method/METHOD_NAME?PARAMETERS&access_token=ACCESS_TOKEN

METHOD_NAME – название метода из списка функций API
PARAMETERS – параметры соответствующего метода API
ACCESS_TOKEN – ключ доступа, полученный в результате успешной авторизации приложения

Ответ приходит в формате JSON. Если же вы более привыкли в XML, то либо привыкайте к JSON, либо отсылайте запросы на такой адрес:
https://api.vk.com/method/METHOD_NAME.xml?PARAMETERS&access_token=ACCESS_TOKEN

Запрос данных пользователей по их user_id осуществляется через метод getProfiles или его полный аналог users.get. При необходимости можно также отправлять параметр fields и получать дополнительные данные пользователя.

class OAuthVK <
.
const URL_GET_PROFILES = ‘https://api.vk.com/method/getProfiles’ ;
public static $userData ;
.
public static function getUser ( ) <

if ( ! self :: $userId ) <
return false ;
>

if ( ! ( $res = @ file_get_contents ( $url ) ) ) <
return false ;
>

$user = json_decode ( $res ) ;

if ( ! empty ( $user -> error ) ) <
self :: printError ( $user -> error ) ;
return false ;
>

if ( empty ( $user -> response [ 0 ] ) ) <
return false ;
>

$user = $user -> response [ 0 ] ;
if ( empty ( $user -> uid ) || empty ( $user -> first_name ) || empty ( $user -> last_name ) ) <
return false ;
>

return self :: $userData = $user ;
>
.
>

В нашем примере ответ от сервера приходит в таком виде (в зависимости от параметров количество полей может быть больше):

stdClass Object
(
[ response ] => Array
(
[ 0 ] => stdClass Object
(
[ u >] => 1
[ first_name ] => Павел
[ last_name ] => Дуров
)
)
)

Имя, фамилия и uid пользователя теперь известны нам, что делать с ними дальше — решайте сами. Я использую OAuth для полноценной регистрации и создаю с этими данными нового пользователя на сайте.

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

Заметка. Пример, созданный в данном уроке, предназначен для работы на локальном сервере.

Шаг 1. Регистрация нового приложения

Для начала нам необходимо создать новое приложение на сайте социальной сети ВКонтакте

В открывшейся форме введите название приложения; выберите тип “Веб-сайт”; В качестве адреса сайта введите путь к папке с проектом на вашем локальном сервере. В моём случае, это http://localhost/vk-auth . Базовый домен: localhost .

После нажатия на кнопку “Подключить сайт”, вам наверняка придётся ввести проверочный код, который придёт по смс. Если вы пройдёте проверку, то вам должна открыться следующая форма с настройками приложения.

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

Из данной формы нам понадобятся такие данные, как `ID приложения`, `Защищённый ключ`, `Адрес сайта`. Запишем их в специальные переменные в файле index.php:

Шаг 2. Генерация ссылки для аутентификации

Для генерации ссылки нам потребуется адрес аутентификации и специальные параметры:

С помощью функции http_build_query, передав туда массив параметров, получим чередование ключей и значений, как в url адресе. Итак, генерируем ссылку и выводим на экран:

Также тут я воспользовался функцией urldecode. Если этого не сделать, то в сгенерированной ссылке могут появиться закодированные символы слешей, знаков двоеточия и так далее. Что-то вроде этого:

Если же мы пропустим данную строку через функцию urldecode, то получим:

Итак, ссылка для аутентификации у нас готова. Если мы сформировали все параметры правильным образом и получили верный url, то пройдя по ссылке, будем перенаправлены по адресу, указанному в настройках приложения (‘http://localhost/vk-auth’). Только теперь к этому адресу будет прикреплён специальный параметр code:

Шаг 3. Получение токена

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

В первую очередь, снова сформируем нужные нам параметры для этого запроса:

Далее нам нужно отправить GET запрос на адрес https://oauth.vk.com/access_token, передав перечисленные параметры. В PHP выполнить GET запрос по какому-то адресу можно несколькими способами. Для данного урока я воспользуюсь функцией file_get_contents.

В результате, при успешном выполнении запроса в переменную $token будет записан ответ от ВКонтакте в JSON формате. Данная строка содержит 3 параметра: access_token, который мы будем использовать в следующих запросах для извлечения информации о пользователе, expires_in — время жизни токена, user_id — id пользователя, который прошёл аутентификацию.

Для того чтобы мы далее могли работать с данными параметрами, декодируем JSON строку с помощью функции json_decode и помещаем данные в массив, передав в качестве второго аргумента true.

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

Итак, теперь когда у нас есть параметры access_token и user_id, мы можем сделать запрос к ВКонтакте API и получить информацию о пользователе. Для начала снова подготовим массив с параметрами, которые в последствии превратим в фрагмент url строки.

В параметр uids записываем id пользователя; в fields перечисляем через запятую поля, которые хотим извлечь (uid — id пользователя, first_name — имя, last_name — фамилию, screen_name — имя отображаемое на страницах VK, sex — пол, bdate — дату рождения, photo_big — фотографию). Для доступа к большему количеству полей обратитесь к ВКонтакте API users.get. В качестве последнего параметра передаём ‘access_token’.

Для получения информации о пользователе сфомированные параметры нам нужно отправить GET запросом по адресу https://api.vk.com/method/users.get.

В результате, если всё было сделано правильно, то получим JSON ответ следующего вида:

Снова преобразуем JSON ответ в массив и обратимся к нулевому элементу, хранящемуся в массиве, доступному по ключу response:

Прошу обратить внимание, что в данном фрагменте, я добавил специальную переменную $result, равную изначально false сразу же после проверки наличия GET параметра code. Если нам удалось извлечь информацию о пользователе, то мы меняем значение этой переменной на true.

Шаг 5. Извлечение информации о пользователе

Теперь извлекать информацию о пользователе мы можем из массива, хранящегося в переменной $userInfo по ключам uid, first_name, last_name, screen_name, sex, bdate, photo_big.

Шаг 6. Дело за вами

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

После этого, всё что нам осталось сделать, так это создать сессию и поместить в неё информацию о нашем пользователе.

На странице выхода из системы просто удаляем сессию с помощью функции unset .

Вот мы и подошли к концу данного урока, и теперь в ваших руках есть решение, которого вы, возможно, долго ждали. Если вас интересует тема аутентификации через социальные сети, то пишите об этом в комментариях, и я с радостью расскажу и покажу, как работать с Одноклассниками, Google-ом, Facebook-ом и другими сервисами.

Данный урок подготовлен для вас командой сайта ruseller.com
Источник урока: www.ruseller.com
Автор: Станислав Протасевич
Урок создан: 11 Марта 2013
Просмотров: 232683
Правила перепечатки

5 последних уроков рубрики "PHP"

Фильтрация данных с помощью zend-filter

Когда речь идёт о безопасности веб-сайта, то фраза "фильтруйте всё, экранируйте всё" всегда будет актуальна. Сегодня поговорим о фильтрации данных.

Контекстное экранирование с помощью zend-escaper

Обеспечение безопасности веб-сайта — это не только защита от SQL инъекций, но и протекция от межсайтового скриптинга (XSS), межсайтовой подделки запросов (CSRF) и от других видов атак. В частности, вам нужно очень осторожно подходить к формированию HTML, CSS и JavaScript кода.

Подключение Zend модулей к Expressive

Expressive 2 поддерживает возможность подключения других ZF компонент по специальной схеме. Не всем нравится данное решение. В этой статье мы расскажем как улучшили процесс подключение нескольких модулей.

Совет: отправка информации в Google Analytics через API

Предположим, что вам необходимо отправить какую-то информацию в Google Analytics из серверного скрипта. Как это сделать. Ответ в этой заметке.

Подборка PHP песочниц

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

Читайте также:  Kitfort кт 535 2 видео

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

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

*

code