7 days of WordPress plugins, themes & templates - for free!* Unlimited asset downloads! Start 7-Day Free Trial
Advertisement
  1. Code
  2. PHP

Настройка сервера OAuth2 с использованием Passport в Laravel

Scroll to top
Read Time: 9 mins

Russian (Pусский) translation by Masha Kolesnikova (you can also view the original English article)

В этой статье мы рассмотрим, как вы можете создать полноценный сервер OAuth2 в Laravel с помощью библиотеки Laravel Passport. Мы рассмотрим необходимые конфигурации серверов вместе с реальным примером, чтобы продемонстрировать то, как вы можете использовать API OAuth2.

Я предполагаю, что вы знакомы с основными концепциями OAuth2 и потоком, поскольку мы собираемся обсудить их в контексте Laravel. Фактически, библиотека Laravel Passport позволяет легко настроить сервер OAuth2 в вашем приложении. Таким образом, другие сторонние приложения могут использовать API, предоставляемые вашим приложением.

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

Конфигурации сервера

В этом разделе мы собираемся установить зависимости, необходимые для того, чтобы библиотека Passport работала с Laravel. После установки нужно будет пройти настройку, чтобы Laravel мог обнаружить библиотеку Passport.

Давайте продолжим и установим библиотеку Passport с помощью Composer.

Это в значительной степени касается установки библиотеки Passport. Теперь надо удостовериться, что Laravel знает о ней.

Работая с Laravel, вы, вероятно, знаете о концепции поставщика услуг, который позволяет настраивать службы в вашем приложении. Таким образом, всякий раз, когда вы хотите включить новую службу в своем приложении Laravel, вам просто нужно добавить соответствующую запись поставщика услуг в config/app.php.

Если вы еще не знакомы с поставщиками услуг Laravel, я бы настоятельно рекомендовал вам ознакомиться с этой вводной статьей, в которой объясняются основы поставщиков услуг в Laravel.

В нашем случае нам просто нужно добавить поставщика PassportServiceProvider в список поставщиков услуг в config/app.php, как показано в следующем фрагменте.

Затем нам нужно запустить команду artisan migrate, которая создает необходимые таблицы в базе данных для библиотеки Passport.

Если быть точным, она создает следующие таблицы в базе данных.

Затем нам нужно создать пару открытых и закрытых ключей, которые будут использоваться библиотекой Passport для шифрования. Как и ожидалось, библиотека Passport предоставляет команду artisan для их создания.

Это должно было создать ключи в storage/oauth-public.key и storage/oauth-private.key. Эта команда также создает некоторые демо-клиентские учетные данные, к которым мы позже еще вернемся.

Двигаемся дальше, давайте oauthify существующий класс модели пользователя, который Laravel использует для аутентификации. Для этого нам нужно добавить трейт HasApiTokens в класс модели User. Давайте сделаем это, как показано в следующем фрагменте.

Трейт HasApiTokens содержит вспомогательные методы, которые используются для проверки токенов в запросе и проверки скоупа ресурсов, запрашиваемых в контексте пользователя, прошедшего проверку подлинности.

Кроме того, нам необходимо зарегистрировать маршруты, предоставленные библиотекой Passport, с помощью нашего приложения Laravel. Эти маршруты будут использоваться для стандартных операций OAuth2, таких как авторизация, запрос токенов доступа и т.п.

В методе boot файла app/Providers/AuthServiceProvider.php давайте зарегистрируем маршруты библиотеки Passport.

И последнее, но не менее важное: нам нужно изменить драйвер api из token в passport в файле config/auth.php, поскольку мы собираемся использовать библиотеку Passport для аутентификации API.

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

Настройка демо-ресурсов

В предыдущем разделе мы проделали большую работу по настройке сервера аутентификации OAuth2 в нашем приложении. В этом разделе мы создадим демонстрационный ресурс, который можно запросить по вызову API.

Мы постараемся, чтобы все было просто. Наш демонстрационный ресурс возвращает информацию пользователя при условии, что в запросе GET присутствует действительный параметр uid.

Давайте создадим файл контроллера app/Http/Controllers/UserController.php со следующим содержимым.

Как обычно, вам нужно также добавить связанный маршрут, который вы должны добавить в файл routes/web.php. Но речь идет о маршруте API, и, следовательно, это требует отдельного рассмотрения.

Маршруты API определены в файле route/api.php. Итак, давайте продолжим и добавим наш пользовательский маршрут API, как показано в следующем фрагменте.

Хотя мы определили его как /user/get, реальный маршрут API - это /api/user/get, и именно его вы должны использовать, когда запрашиваете ресурс по этому маршруту. Префикс api автоматически обрабатывается Laravel, и вам не нужно беспокоиться об этом!

В следующем и последнем разделе мы обсудим, как вы можете создавать учетные данные клиента и использовать API OAuth2.

Как использовать API OAuth2

Теперь, когда мы установили сервер OAuth2 в нашем приложении, любое стороннее приложение может подключиться к нашему серверу с помощью OAuth и использовать API, доступные в нашем приложении.

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

Библиотека Passport предоставляет команду artisan для создания клиентских учетных записей. Давайте продолжим и создадим демо-клиента.

Когда вы запустите команду artisan passport:client, она задаст вам несколько вопросов, прежде чем создавать учетную запись клиента. Из них есть важный вопрос, который запрашивает URL-адрес обратного вызова.

URL-адрес обратного вызова - это тот адрес, куда после авторизации пользователи будут перенаправлены обратно. И сюда будет отправлен код авторизации, который предполагается использовать в обмен на токен доступа. Мы собираемся создать этот файл в одно мгновение.

Теперь мы готовы протестировать API OAuth2 в приложении Laravel.

Для демонстрационных целей я сначала создам каталог oauth2_client в document root. В идеале эти файлы должны быть расположены на стороннем сервере, который хочет использовать API в нашем приложении Laravel.

Давайте создадим файл oauth2_client/auth_redirection.php со следующим содержимым.

Обязательно измените параметры client_id и redirect_uri, чтобы отразить ваши собственные настройки - те, которые вы использовали при создании учетной записи демо-клиента.

Затем создадим файл oauth2_client/callback.php со следующим содержимым.

Опять же, не забудьте настроить URL-адреса и учетные данные клиента в соответствии с вашей настройкой в указанном выше файле.

Как это работает

В этом разделе мы проверим все полностью с точки зрения конечного пользователя. В качестве конечного пользователя перед вами есть два приложения:

  1. Первое - это приложение Laravel, с которым у вас уже есть учетная запись. Оно содержит информацию, которую вы можете предоставить другим сторонним приложениям.
  2. Второй - демо-приложение стороннего клиента, auth_redirection.php и callback.php, которое хочет получить вашу информацию из приложения Laravel с использованием API OAuth.

Поток начинается с стороннего клиентского приложения. Итак откройте URL-адрес http://localhost/oauth2_client/auth_redirection.php в своем браузере, и это должно перенаправить вас в приложение Laravel. Если вы еще не вошли в приложение Laravel, приложение попросит вас сперва сделать это.

После входа в систему приложение отображает страницу авторизации.

Если пользователь разрешает этот запрос, пользователь будет перенаправлен обратно в стороннее клиентское приложение по адресу http://localhost/oauth2_client/callback.php вместе с code в качестве параметра GET, содержащего код авторизации.

После того как стороннее приложение получит код авторизации, оно может обменять этот код с приложением Laravel для получения токена доступа. И это именно то, что оно сделает в следующем фрагменте файла oauth2_client/callback.php.

Затем стороннее приложение проверяет ответ запроса CURL, чтобы убедиться, что он содержит действительный токен доступа.

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

Мы попытались подражать use-case в том, что стороннее приложение хочет получить доступ к информации о пользователе из приложения Laravel. И мы уже создали API ендпоинт, http://your-laravel-site-url/api/user/get, в приложении Laravel.

Итак, это полный процесс того, как вы должны использовать API OAuth2 в Laravel.

И с этим мы дошли до конца этой статьи.

Заключение

Сегодня мы изучили библиотеку Passport в Laravel, которая позволяет нам легко настроить сервер OAuth2 в приложении.

Для тех из вас, кто только начинает работать с Laravel или хочет расширить свои знания, сайт или приложение с расширениями, у нас есть множество вещей, которые вы можете изучать на Envato Market.

Не стесняйтесь делиться своими мыслями и предложения, используя приведенный ниже канал!

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.