Extension:SocialLogin/SocialLoginPlugin/ru

From MediaWiki.org
Jump to navigation Jump to search

Принцип работы протокола OAuth 2.0[edit]

Протокол OAuth 2.0 — это протокол взаимодействия клиентского приложения, пользователя и сервера. Основная последовательность взаимодействия этих сущностей представлена на диаграмме справа.

User flow[edit]

OAuth flow.png

Работу пользователя с протоколом OAuth 2.0 можно представить в виде последовательности следующих шагов:

  1. Переадресация пользователя на страницу предоставления прав клиентскому приложению на указанные права.
  2. Пользователь авторизирует клиентское приложения и разрешает использование тех или иных личных данных.
  3. После авторизации клиентское приложение переадресовывает пользователя на предустановленную страницу, при этом происходит передача параметра access_token, который используется для дальнейшего взаимодействия с сервером.

Server flow[edit]

OAuth server flow.png

Для взаимодействия стороннего сервера с клиентским приложением и сервером OAuth эта последовательность преобретает другой вид:

  1. Переадресация пользователя на страницу предоставления прав клиентскому приложению на указанные права.
  2. Пользователь авторизирует клиентское приложения и разрешает использование тех или иных личных данных.
  3. После авторизации клиентское приложение переадресовывает пользователя на предустановленную страницу, при этом происходит передача параметра code, который используется для получения параметра access_token.
  4. Сторонний сервер отправляет запрос серверу OAuth, передавая параметр code, а в ответ получает параметр access_token, который используется для дальнейшего взаимодействия с сервером.

Написание собственного плагина[edit]

Для того чтобы создать собственный плагин взаимодействия с сервером OAuth 2.0 достаточно реализовать интерфейс SocialLoginPlugin. Имя классо должно быть выбрано в соответствии с названием хоста сервера OAuth, при этом символ «.» должен быть заменён на «_», например vk_com, facebook_com и т.п. Интерфейс имеет следующие методы, которые должны быть переопределены в реализуемом классе:

public static function login( $code );
public static function check( $id );
public static function loginUrl( );

Расширение добавляет несколько полезных функций:

  • SLgenerateName — метод генерации возможного имени пользователя для формы регистрации, который на входе ожидает массив текстовых значений — вариантов возможных имён пользователя на русском или английском языке;
  • SLgetContents — метод для совершения GET/POST запросов. На входе ожидает два параметра: обязательный параметр $url — адрес запроса и опциональный параметр $data — словарь, ключи которого являются названиями параметров, а значения — их значениями. Метод возвращает содержимое ответа.

Документированный пример плагина взаимодействия MediaWiki с VK.COM можено посмотреть здесь.

Метод login[edit]

Метод login принимает единственный параметр $code и используется для получения параметра access_token и других сведений о пользователе. Данный метод должен вернуть false в случае если авторизация не удалась или, если $code был валидным, массив вида:

array(
	"id" => userid,
	"service" => "site.com",
	"profile" => "userid@site.com",
	"name" => "VasiaPupkin",
	"email" => user@email.com,
	"realname" => "Вася Пупкин",
);

Здесь:

  • id — уникальный идентификатор пользователя на сервере OAuth (часто передаётся вместе с ответом от сервера);
  • service — уникальный идентификатор сервера OAuth (рекомендуется использовать имя сайта);
  • profile — строка, образованная конкатенацией параметра id, символа '@' и параметра service;
  • name — предлагаемое имя пользователя для отображения в форме регистрации (рекомендуется использовать метод SLgenerateName);
  • email — необязательный параметр, email пользователя, необходим для отображения в форме регистрации;
  • realname — настоящее имя пользователя.

В теле метода необходимо присвоить:

$_SESSION['sl_token'] = $access_token;

Здесь:

  • $access_token — access_token, который вернул сервер OAuth в ответ на валидацию параметра $code.

Метод check[edit]

Метод check необходим для повторного подтверждения личности пользователя в случае если после авторизации на сервере OAuth оказалось, что нет локального пользователя, который связан с аккаунтом сервера OAuth. Метод принимает единственный параметр — уникальный идентификатор пользователя, полученный методом login. Данный метод должен вернуть false в случае если повторная авторизация не удалась или, если $access_token был валидным, массив вида:

array(
	"id" => 123456789,
	"service" => "site.com",
	"profile" => "userid@site.com",
	"realname" => "Вася Пупкин",
	"access_token" => "1a2b3c4d5e6f"
);

Здесь:

  • id — уникальный идентификатор пользователя на сервере OAuth (часто передаётся вместе с ответом от сервера);
  • service — уникальный идентификатор сервера OAuth (рекомендуется использовать имя сайта);
  • profile — строка, образованная конкатенацией параметров id и service;
  • realname — настоящее имя пользователя;
  • access_token — access_token, полученый во время валидации параметра $code (можно получить из сессии $_SESSION['sl_token'])

Метод loginUrl[edit]

Метод loginUrl не имеет входных параметров и должен вернуть адрес перенаправления пользователя для авторизации в клиентском приложении. В адресе должны присутствовать все необходимые параметры, так чтобы сервер после успешной авторизации вернул параметр code.

Подключение[edit]

  1. После реализации интерфейса сохраните созданный класс в файле с именем, соответствующим имени хоста сервера OAuth, например vk.com.php, facebook.com.php;
  2. Загрузите полученный файл в папку plugins каталога SocialLogin директории extensions;
  3. Подключите плагин, добавив в массив $wgSocialLoginServices запись вида:
"site.com" => "site"
Другие языки: English  • русский