Авторизация с помощью OAuth 2.0 в Вконтакте, Моем мире и Facebook

Совсем недавно обнаружил замечательный ресурс с практически ценными заметками по web-программированию itlessons.info. Для оценки этой значимости делаю перепечатку статьи о механизмах OAuth 2.0, которые много чего позволяют в том числе и делать регистрацию на своих ресурсах, используя социальные сети.

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

Процесс получение данных из социальной сети происходит обычно с использование открытого протокола авторизации OAuth 2.0, который позволяет без необходимости предоставления третьей стороне (нашему сайту) логина и пароля, получать ограниченный доступ к пользовательским ресурсам. Происходит это следующим образом:

oauth-2-schema[1]

  1. Сайт перенаправляет пользователя на специальную страницу в социальной сети, указывая в параметрах права на какую информацию необходимы
  2. На этой странице пользователь авторизовывается, если необходимо.
  3. После авторизации пользователю разъясняется права запрашивемые сайтом, а также спрашивается его разрешение
  4. В случае согласия, пользователь перенаправляется на сайт с специальным идентификатором, с помощью которого сайт может получить авторизационный токен
  5. С помощью этого токена и делаются запросы к api социальной сети
  6. При повторной авторизации этап подтверждения прав пропускается за ненадобностью

В социальной сети необходимо создать приложение, идентификатор и секретный ключ которого будут использоваться при запросе токена в качестве параметров client_id и client_secret.

Использование OAuth 2.0 протокола удобно, но в реальном мире есть проблемы. Все социальные сети реализуют данный протокол по разному. Общая концепция сохраняется, но существуют различия, из-за которых приходится писать довольно много кода.

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

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

 //auth_callback.php
  $auth = new \Social\Auth\AuthVk($APP_ID_VK, $APP_SECRET_VK, $APP_SCOPE_VK);
  $token = $auth->authenticate($_REQUEST, $REDIRECT_URL_VK);
 
  //call api with access_token
  $api = new \Social\Api\ApiVk($token);  
  $user = $api->getProfile();
 
  // use or save user object
  // $user->id
  // $user->firstName
  // $user->lastName
  // $user->nickname
  // $user->screenName
  // $user->photoUrl
  // $user->photoBigUrl
  // ...

После подтверждения прав пользователь перенаправляется на redirect_url, в котором сайт запрашивает токен и производит первый запрос к api социальной сети, получая информацию о пользователе.

//auth_callback.php
  $auth = new \Social\Auth\AuthVk($APP_ID_VK, $APP_SECRET_VK, $APP_SCOPE_VK);
  $token = $auth->authenticate($_REQUEST, $REDIRECT_URL_VK);
 
  //call api with access_token
  $api = new \Social\Api\ApiVk($token);  
  $user = $api->getProfile();
 
  // use or save user object
  // $user->id
  // $user->firstName
  // $user->lastName
  // $user->nickname
  // $user->screenName
  // $user->photoUrl
  // $user->photoBigUrl
  // ...
 

Как видно все просто. Библиотека берет на себя все сложности.

На момент написания статьи в библиотеке реализована авторизация в социальных сетях Вконтакте, Моем мире и Facebook. Но можно с легкостью реализовать поддержку и других социальных сетей. Библиотека находится на githup и будет постепенно развиваться. Любой желающий может поучаствовать в ее развитии.

Для более глубокого понимания данной темы скачайте исходный код и разберите его. В нем даны ссылка для дальнейшего изучения.

 Исходный код     Демо

UPD:
Вариант реализации для nodejs и passportjs тут.

Поделиться ссылкой с друзьями


1 нравится это

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

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

Лимит времени истёк. Пожалуйста, перезагрузите CAPTCHA.