Аутентификация Opauth

В последние время аутентификация с помощью поставщиков услуг таких как Twitter, Facebook, среди десятков аутентификации превратилась в качестве стандарта для сторонней аутентификации, позволяя нам надежно аутентифицировать приложение пользователя через стандартный интерфейс. Конечно мы можем найти множество библиотек open source для доступа к провайдеру аутентификации, но большая проблема в этих библиотеках является то, что разные разработчики имеют различные стили и пути реализации одной и той же системы. Трудно использовать эти библиотеки стандартным способом или для замены одной библиотеки на другую.

Библиотека Opauth с открытым исходным кодом, создана для стандартизации процесса аутентификации между различными поставщиками услуг (провайдерами). В этой статье с помощью CodeIgniter мы рассмотрим, как можно эффективно использовать Opauth для стандартизации нашей стратегии проверки подлинности. Даже если вы не знакомы с PHP фреймворком CodeIgniter продолжай чтение, поскольку он будет похож на другие фреймворки. Как только вы поймете подробности необходимые для интеграции, адаптации к любой структуре вам будет намного легче.

Важность Opauth

Opauth действует как связь между приложением и открытой библиотекой аутентификации. Его можно рассматривать как стандартный адаптер для этой библиотеки аутентификации. Как только вы настроите Opauth, любая услуга может быть запрошена с помощью стандартного набора методов, вместо того чтобы учить различные API. Это также позволяет нам получать ответы о успешном или неудачном результате в стандартном формате. Opauth портативный, что дает нам возможность изменить службу библиотек аутентификации, а также с незначительными изменениями основы нашего выбранного фреймворка PHP.

к меню ↑

Процесс Opauth

Сначала, посмотрите на рисунок, который показывает процесс обработки Opauth:

Процесс обработки Opauth
Схема процесса обработки Opauth

Сначала программа запрашивает информацию у библиотеки CodeIgniter о открытой аутентификации. Библиотека инициализирует процесс Opauth путем создания класса объекта Opauth. Opauth просит стандартную стратегию в зависимости от условии URL. Стратегия — это набор инструкций, которые обрабатывают ответы поставщики auth. Стратегия применяет конкретную библиотеку для начала фактической проверки подлинности запроса. Наконец, у нас есть доступ к соответствующему API поставщика услуг.

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

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

к меню ↑

Интеграция Opauth с CodeIgniter

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

Во-первых, нам нужно скачать обычную версию библиотеки Opauth из GitHub и скопировать загруженный каталог в application/libraries (поскольку мы используем Codeigniter, он должен быть интегрирован в виде плагина или библиотеки). Я назвал каталог Opauth_lib, но вы можете удалить пример и тест внутри каталога, если необходимо.

Создайте файл библиотеки Opauth_lib.php, а файл Opauth.php расположить внутри каталога lib.

<?php
$opauth_lib_dir = dirname(__FILE__) . '/Opauth_lib/lib/Opauth/';
require $opauth_lib_dir . 'Opauth.php';

Теперь создадим класс для библиотеки:

<?php
class OpauthLib
{
protected $configurations;
protected $opauth_obj;

public function __construct($configurations) {
$this->configurations = $configurations;
}
}

Конфигурации необходимые для работы Opauth, данные конфигурации в конструктор класса библиотеки. Можно было бы использовать конфигурационный файл внутри каталога application/config включать сведения необходимые для Opauth:

<?php
$config['opauth'] = array(
'path' => '/auth/login/',
'callback_url' => 'http://example.com/auth/authenticate/',
'callback_transport' => 'post',
'security_salt' => 'rakhithanimesh123',

'Strategy' => array(
'Twitter' => array(
'key' => 'twitter app key',
'secret' => 'twitter app secret'
),
'LinkedIn' => array(
'api_key' => 'linkedin app key',
'secret_key' => 'linkedin app secret'
)
),
);

Давайте рассмотрим значение каждого из параметров в приведенном выше коде.

  • path — проверяет по ссылке где доступен ваш логин. Я установил Codeigniter в качестве корневого каталога, путь будет /auth/login/, он является контроллер и имя функции соответственно.
  • callback_url — проверяет URL обработки ответа после успешной аутентификации, или отказа. Я использовал один и тот же контроллер, но с другой функцией. Здесь мы должны определить полный URL, а не относительный URL.
  • callback_transport — проверяет ответ. По умолчанию это session. Так как CodeIgniter не использует собственный session, я указал post для обратного вызова transport. Вы можете использовать session, get или post для этого параметра.
  • security_salt — проверяет случайный ключ безопасности для подписания ответа oauth.
  • Strategy — определяет массив информации и данные поставщика услуг для вашего приложения. Мы должны обеспечить все необходимые параметры с их значениями для каждой стратегии. Здесь я использовал Twitter и LinkedIn, как стратегии и применения их ключей и параметров.

После того, как в конфигурации определены стратегии, мы должны получить соответствующие библиотеки с классами стратегии и скопировать их в каталог OpauthLib/lib/Opauth/Strategy. Поставщики услуг, называются поставщиками Opauth, и следующий снимок показывает содержимое внутри конкретной стратегии.

Интеграция Opauth с CodeIgniterтной стратегии
Получение соответствующей библиотеки с классами стратегии
к меню ↑

Реализация открытого входа аутентификации

Теперь, когда мы интегрировали CodeIgniter, следующий шаг создать логин ссылки для каждой из стратегий, которые определены в файле конфигурации. Я использовал путь /auth/login и поэтому мы должны создать контроллер с методом login().

<?php
class Auth extends CI_Controller
{
protected $open_auth_config;

public function __construct() {
parent::__construct();
$this->open_auth_config = $this->config->item('opauth');
$this->load->library('opauth_lib', $this->open_auth_config);
}

public function login($stratergy = "") {
if ($stratergy != "") {
$this->opauth_lib->initialize();
}
else {
foreach ($this->open_auth_config['Strategy'] as $strategy => $strategy_detail) {
echo "<p><a href='".$this->config->item('base_url')."auth/login/".strtolower($strategy)."'>".$strategy."</a></p>";
}
}
}
}

Конструктор Opauth получает информацию о конфигурации и загружает библиотеку, которую мы создали в предыдущем разделе. В методе login() создан логин и ссылки перенаправляющая пользователя на соответствующий сайт для аутентификации. Opauth логин URL настроены, добавив стратегию в параметре path. Например, Twitter login URL будет /auth/login/twitter и LinkedIn URL будет /auth/login/linkedin.

Стратегия передается как параметр в нашем методе login(). Поэтому, когда стратегия пустая мы создаем ссылки входа для всех стратегий с использованием Opauth config. Когда пользователь нажимает на ссылку входа, стратегия не будет пустой, и мы вызываем метод initialize нашей библиотеки Opauth, чтобы перенаправить пользователя для аутентификации. Ниже приводится реализация метода initialize внутри библиотеки классов Opauth_lib.

<?php
public function initialize() {
$this->opauth_obj = new Opauth($this->configurations);
$this->opauth_obj->run();
}

Все, что нужно сделать, это инициализировать класс Opauth в основной библиотеке Opauth с конфигурацией и вызвать метод run(). Он автоматически определяет стратегии через URL и перенаправляет пользователя для проверки подлинности.

к меню ↑

Обработка открытого ответа Auth

Давайте предположим, что пользователь нажал на ссылку входа в Twitter. Иногда, есть разрешение входа в Twitter, переадресация будет принимать пользователя которого мы указали в качестве обратного вызова URL в config. В этом случае, ответ будет осуществляться с помощью методов Auth sauthenticate().

Вот реализация:

<?php
public function authenticate() {
$response = null;
$response = unserialize(base64_decode($_POST['opauth']));
echo "<pre>";print_r($response);exit;
}

Поскольку я указан метод post в конфигурации, в ответ можно получить доступ с помощью $_POST['opauth']. Теперь пользователь вошел в нашу систему, используя открытую аутентификацию и ответ будет содержать информацию о пользователе в стандартном формате. Вы можете сохранить нужную информацию в сессии или базы данных, чтобы сохранить логин для активного пользователя через много запросов.

Для реализации метода logout, просто уберите используемую информацию, чтобы сохранить пользователя и перенаправить его для входа в систему.

к меню ↑

Заключение

В этой статье мы рассмотрели, как интегрировать Opauth с CodeIgniter. Ниже приводится общий перечень руководящих указаний по включению Opauth в любой PHP framework:

  1. Скачать обычную версию Opauth и создать библиотеку или плагин в зависимости от вашей базы.
  2. Создать новый файл конфигурации, или скопировать информацию config в существующий файл конфигурации системы.
  3. Добавить любое количество стратегий с необходимыми параметрами.
  4. Получить библиотеку поставщика услуг для каждого из определенных стратегий и скопировать в библиотеку внутри директорий Opauth.
  5. Создать две функции для обработки логина ссылки и ответы на имеющиеся стратегии.
  6. Инициализировать класс Opauth и вызвать метод run(), чтобы все работало.

Скачать исходный код используемый в этой статье на PHPMaster GitHub.

Расскажите мне, что вы думаете об использовании Opauth, чтобы стандартизировать механизм аутентификации. Попробуйте создать плагины Opauth для других PHP фреймворков.