Как перестать бояться OAuth2 и начать жить с Laravel Passport

10 апр 2026
3,412
801
77
4 недели

Представьте ситуацию: вы пишете API для своего проекта. Сначала всё просто — обычная сессионная авторизация. Потом появляется мобильное приложение, затем сторонние сервисы просят доступ к данным пользователей, а следом фронтенд на Vue или React требует нормальные токены. В этот момент разработчик обычно открывает спецификацию OAuth2, видит термины вроде «Grant Types», «Client Credentials» или «PKCE» и тихо закрывает вкладку.

Реализовать полноценный OAuth2-сервер с нуля — это задача на несколько недель плотной работы и десяток потенциальных дыр в безопасности. В экосистеме Laravel эту проблему закрывает Passport.

Passport Logo Dark Mode Passport Logo Dark Mode

Что это такое

Laravel Passport — это полноценная имплементация OAuth2-сервера для вашего приложения. Он построен на базе League OAuth2 Server, но адаптирован под синтаксис и архитектуру Laravel. Если вам нужно, чтобы пользователи могли выдавать ключи доступа сторонним приложениям (как «Войти через Google») или вы строите сложную микросервисную архитектуру, где сервисы общаются между собой по токенам, Passport — стандарт де-факто.

Важно понимать разницу: в Laravel есть еще и Sanctum. Если вам нужно просто авторизовать свой SPA-фронтенд или мобилку, Passport может быть избыточен. Но если речь идет о выдаче реальных OAuth2-токенов доступа, тут альтернатив практически нет.

Реклама

Пять вещей, которые делает Passport

Полная поддержка Grant Types

Passport из коробки умеет работать со всеми основными типами разрешений. Вам не нужно вручную прописывать логику обмена кода на токен или обновление через Refresh Token. Это касается и Authorization Code Grant (самый безопасный для веб-приложений), и Client Credentials Grant (для связи сервер-сервер).

Управление клиентами и токенами

В комплекте идут готовые миграции для базы данных. Вы получаете таблицы для хранения OAuth-клиентов, токенов и кодов авторизации. Управление ими происходит через лаконичный API. Например, создание нового клиента для стороннего разработчика выглядит так:

use Laravel\Passport\ClientRepository;

$clients = new ClientRepository();
$client = $clients->create($userId, 'Название сервиса', 'https://redirect-url.com');

Встроенные Vue-компоненты

Разработчики добавили в пакет набор готовых UI-компонентов на Vue.js. Их можно опубликовать в свой проект и сразу получить интерфейс для создания клиентов, управления персональными токенами доступа и их отзыва. Это экономит пару дней на верстке и фронтенд-логике.

Персональные токены доступа (PAT)

Иногда пользователю нужно просто сгенерировать токен в личном кабинете, чтобы дергать API через curl или Postman, без прохождения всего флоу OAuth2. Passport позволяет выпускать такие токены одной командой.

Области доступа (Scopes)

Это отличный способ разграничить права. Вы можете определить, что один токен позволяет только читать данные профиля, а другой — совершать платежи. Проверка в контроллере выглядит максимально привычно для тех, кто работал с Middleware в Laravel:

Route::get('/orders', function () {
    // Токен должен иметь scope 'check-status'
})->middleware(['auth:api', 'scopes:check-status']);

Как это работает внутри

Passport использует библиотеку OpenSSL для генерации и шифрования токенов. При установке вы генерируете пару ключей (приватный и публичный). Когда пользователь успешно авторизуется, сервер выдает ему JWT (JSON Web Token), подписанный вашим приватным ключом.

Клиент сохраняет этот токен и прикладывает его к заголовку Authorization в каждом запросе. Passport перехватывает запрос, проверяет подпись публичным ключом и, если всё в порядке, аутентифицирует пользователя. Весь процесс прозрачен для разработчика — вы продолжаете работать с объектом $request->user(), как и в обычном веб-приложении.

Кому стоит выбрать Passport

Я часто вижу, как новички тянут Passport в маленькие проекты, где достаточно обычной сессии. Давайте будем честными: Passport — тяжеловесный инструмент. Он добавляет в базу данных семь таблиц и требует настройки ключей шифрования.

Вам точно стоит его использовать, если:

  1. Вы строите платформу, где сторонние разработчики будут создавать свои приложения (как Slack или GitHub).
  2. Ваша компания использует архитектуру, где множество разных сервисов должны доверять токенам друг друга.
  3. Вам критически важна строгая приверженность стандартам OAuth2.

Если же ваша задача — просто «прикрутить логин» к мобильному приложению на Flutter или React Native, посмотрите в сторону Laravel Sanctum. Он легче, проще в настройке и не требует глубоких знаний протоколов авторизации.

С чего начать

Установка стандартная для пакетов Laravel: composer require laravel/passport. После этого нужно запустить миграции и команду php artisan passport:install, которая создаст ключи шифрования.

Дальше всё зависит от ваших задач. Документация у проекта отличная — там по шагам расписано, как настроить каждый тип гранта. Несмотря на кажущуюся сложность OAuth2, Passport делает процесс внедрения максимально безболезненным, насколько это вообще возможно для такой сложной темы.

🍪 Мы используем файлы cookie и сервис аналитики Яндекс.Метрика, чтобы сайт работал лучше. Продолжая пользоваться devtrends.ru, вы соглашаетесь с обработкой данных согласно Политике конфиденциальности.