Статьи

Интеграция открытой аутентификации с использованием Opauth

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

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

Важность Opauth

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

Процесс выполнения Opauth

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

opauth-01

Сначала приложение запрашивает открытые данные аутентификации из библиотеки 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 поставщики услуг называются поставщиками, и на следующем экране показано содержимое определенной стратегии.

opauth-2

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

Теперь, когда мы интегрированы с 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:

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

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

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

Изображение через Fotolia