За последние годы открытая аутентификация стала стандартом для сторонней аутентификации и позволяет нам безопасно аутентифицировать пользователей нашего приложения через стандартный интерфейс. Twitter и Facebook стали лучшими среди десятков поставщиков услуг аутентификации. И, конечно, мы можем найти много библиотек с открытым исходным кодом для доступа к поставщикам аутентификации, но большая проблема с этими библиотеками заключается в том, что разные разработчики имеют разные стили и способы реализации одной и той же системы. Трудно использовать эти библиотеки стандартным способом или заменить одну библиотеку другой.
Opauth — это библиотека с открытым исходным кодом, созданная для стандартизации процесса аутентификации среди различных поставщиков услуг. В этой статье мы рассмотрим, как мы можем эффективно использовать Opauth для стандартизации наших стратегий аутентификации. Я буду использовать CodeIgniter здесь, но даже если вы не знакомы с CodeIgniter, я предлагаю вам продолжить чтение, так как он будет аналогичным для других сред. Как только вы поймете необходимые детали для интеграции, адаптироваться к любой среде очень просто.
Важность Opauth
Opauth действует как интерфейс между вашим приложением и открытыми библиотеками провайдера аутентификации. Это можно рассматривать как стандартный адаптер для этих библиотек аутентификации. После настройки Opauth любая служба может быть запрошена с использованием стандартного набора методов вместо изучения различных API. Это также позволяет нам получать ответы об успешном или неудачном исполнении в стандартном формате. Opauth обладает высокой переносимостью, что дает нам возможность изменять открытые библиотеки служб авторизации, а также нашу платформу PHP с небольшими изменениями.
Процесс выполнения Opauth
Сначала давайте рассмотрим следующую иллюстрацию, которая показывает процесс обработки запросов приложений Opauth:
Сначала приложение запрашивает открытые данные аутентификации из библиотеки CodeIgniter. Библиотека инициализирует процесс Opauth путем создания объекта класса Opauth. Opauth запрашивает стандартную стратегию в зависимости от предоставленного URL. Стратегия — это набор инструкций, которые общаются с поставщиками аутентификации и обрабатывают их ответы. Стратегия использует специальную библиотеку, чтобы инициировать фактический запрос аутентификации. Наконец, у нас есть доступ к соответствующему API поставщика услуг.
Как вы можете видеть на картинке, я отделил раздел Opauth. Opauth содержит инициализацию, библиотеки поставщиков услуг и соответствующие интерфейсы стратегии. Фактический запрос аутентификации начинается после того, как Opauth завершает процесс стандартизации запроса.
В настоящее время на сайте Opauth насчитывается около 18 библиотек, которые поставляются со встроенным классом стратегии для Opauth. В тех случаях, когда у поставщика услуг нет класса стратегии, мы можем создать свой собственный класс, используя руководство по вкладу в стратегию .
Интеграция Opauth с CodeIgniter
Интеграционные библиотеки Opauth доступны для использования со многими из более популярных фреймворков, но также и с простой «ванильной» версией библиотеки, которая будет использоваться в тех, которые не используют фреймворк. В идеале у вас должно быть представление о том, как интегрировать простую версию PHP в платформу, чтобы вы могли работать с теми, которые в данный момент не поддерживаются. CodeIgniter является одним из моих любимых, поэтому я объясню, как вы можете интегрировать простую версию Opauth в CodeIgniter с нуля.
Во-первых, нам нужно скачать простую версию библиотеки Opauth с GitHub и скопировать загруженный каталог в каталог вашего application/libraries
(поскольку мы используем Codeigniter, его необходимо интегрировать в виде плагина или библиотеки). Я назвал каталог Opauth_lib
, и вы можете удалить каталоги example
и test
внутри, если это необходимо.
Я хотел бы показать вам, как интегрировать Opauth в CodeIgniter с помощью пользовательской библиотеки Codeigniter, поэтому создайте файл библиотеки как Opauth_lib.php
и Opauth.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' ) ), );
Давайте обсудим значение каждого из параметров в приведенном выше коде.
- путь — определяет, где вы получаете доступ к своим ссылкам входа в систему. Поскольку я установил Codeigniter в качестве корневого каталога, путь будет
/auth/login/
, который является контроллером и именем функции соответственно. - callback_url — определяет URL, по которому вы обрабатываете ответ после успешной аутентификации или сбоя. Я использовал тот же контроллер, но с другой функцией. Здесь мы должны определить полный URL вместо относительного URL.
- callback_transport — определяет, как вы обрабатываете ответ. По умолчанию это «сессия». Поскольку CodeIgniter не использует собственные сеансы, я указал «post» для транспорта обратного вызова. Вы можете использовать «session», «get» или «post» для этого параметра.
- security_salt — определяет случайный ключ безопасности для подписи ответа oauth.
- Стратегия — определяет массив информации о поставщике услуг для вашего приложения. Нам необходимо предоставить необходимые параметры с их значениями для каждой стратегии. Здесь я использовал Twitter и LinkedIn в качестве стратегий и ключи их приложений в качестве параметров.
Как только стратегии определены в конфигурации, мы должны получить соответствующие библиотеки с их классом стратегии и скопировать их в OpauthLib/lib/Opauth/Strategy
. В Opauth поставщики услуг называются поставщиками, и на следующем экране показано содержимое определенной стратегии.
Реализация открытого входа в систему аутентификации
Теперь, когда мы интегрированы с 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()
создает ссылки для входа в систему, чтобы перенаправить пользователя на соответствующий сайт для аутентификации. URL-адреса входа в Opauth настраиваются путем добавления стратегии в параметр пути. Например, URL входа в Twitter будет /auth/login/twitter
а URL LinkedIn будет /auth/login/linkedin
.
Стратегия передается в качестве необязательного параметра нашему методу login()
. Поэтому, когда стратегия пуста, мы генерируем ссылки для входа для всех стратегий, используя конфигурацию Opauth. Когда пользователь нажимает на ссылку для входа, стратегия не будет пустой, и мы вызываем метод initialize нашей библиотеки Opauth, чтобы перенаправить пользователя для аутентификации. Ниже приведена реализация метода initialize внутри класса библиотеки Opauth_lib
.
<?php public function initialize() { $this->opauth_obj = new Opauth($this->configurations); $this->opauth_obj->run(); }
Все, что нужно сделать, это инициализировать класс Opauth
в базовой библиотеке Opauth с помощью конфигураций и вызвать метод run()
. Он автоматически идентифицирует запрошенную стратегию через URL и перенаправляет пользователя для аутентификации.
Обработка ответа Open Auth
Давайте предположим, что пользователь нажал на ссылку входа в Twitter. Как только она авторизует приложение, войдя в Twitter, перенаправление приведет пользователя обратно в местоположение, которое мы указали в качестве URL обратного вызова в конфигурации. В этом случае ответ будет обработан с помощью метода authenticate()
Auth
. Вот его реализация:
<?php public function authenticate() { $response = null; $response = unserialize(base64_decode($_POST['opauth'])); echo "<pre>";print_r($response);exit; }
Так как я указал метод post в конфигурации, доступ к ответу можно получить с помощью $_POST['opauth']
. Теперь пользователь вошел в нашу систему с использованием открытой аутентификации, и ответ будет содержать сведения о пользователе, токены пользователя и другую необходимую информацию в стандартном формате. Вы можете сохранить нужную информацию в сеансе или базе данных, чтобы логин оставался активным для пользователя во многих запросах.
Чтобы реализовать метод выхода из системы, просто удалите соответствующую информацию, используемую для сохранения входа пользователя, и перенаправьте обратно на ссылки входа в систему.
В заключение
В этой статье мы обсудили, как интегрировать Opauth с CodeIgniter. Ниже приведен общий список рекомендаций по интеграции Opauth с любой конкретной платформой PHP:
- Загрузите простую версию Opauth и создайте библиотеку или плагин в зависимости от вашей среды.
- Создайте новый файл конфигурации или скопируйте детали конфигурации в существующий файл конфигурации платформы.
- Добавьте любое количество стратегий с необходимыми параметрами.
- Получите библиотеки поставщиков услуг для каждой из определенных стратегий и скопируйте их в каталоги библиотек внутри Opauth.
- Создайте две функции для обработки ссылок входа и ответов для доступных стратегий.
- Инициализируйте класс Opauth и вызовите его метод
run()
чтобы всеrun()
.
Вы можете получить копию исходного кода, использованного для этой статьи, с GitHub.
Дайте мне знать, что вы думаете об использовании Opauth для стандартизации вашего механизма аутентификации. Попробуйте создать плагины Opauth для других PHP-фреймворков и поддерживать сообщество с открытым исходным кодом.
Изображение через Fotolia