Laravel Passport 用于 PHP:完整指南及示例

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

Laravel Passport 用于 PHP:OAuth2 服务器完整指南

\n\n

1. 什么是 Laravel Passport 以及为什么需要它

\n\n

Laravel Passport 是 Laravel (PHP) 框架的完整 OAuth2 服务器实现。它提供了一套现成的 API 认证工具集,使开发人员能够使用标准的访问令牌 (access tokens) 和刷新令牌 (refresh tokens) 快速为其 RESTful API 实施保护。该库基于强大的 League OAuth2 Server 包构建,并已适配 Laravel 生态系统,包括迁移、外观、Artisan 命令和 Eloquent 模型。

\n\n

Passport 的主要目标是让开发人员免于手动编写生成、验证和存储令牌的复杂逻辑。相反,您将获得用于颁发令牌(通过 grant types)的现成路由、用于保护路由的中间件,以及用于管理客户端(应用程序)和令牌的便捷方法。Passport 非常适合需要安全访问您 API 的单页应用程序 (SPA)、移动应用程序和服务器端客户端。

\n\n

为什么要使用 Passport 而不是自建解决方案?首先,安全性:该库实现了 OAuth2 规范的所有要求,包括 CSRF 防护、正确的 scope 处理和 PKCE (Proof Key for Code Exchange)。其次,开发速度:您将获得现成的迁移、模型和控制器。第三,灵活性:Passport 支持所有主要的 grant types(授权码、客户端凭证、密码授权、个人访问令牌),并且可以轻松扩展以满足特定需求。

\n\n

2. 安装

\n\n

Laravel Passport 的安装通过 Composer(PHP 的标准包管理器)进行。在您的 Laravel 项目根目录下执行以下命令:

\n\n
composer require laravel/passport
\n\n

安装包后,需要执行迁移并发布配置。Passport 使用自己的迁移系统,该系统会创建用于存储客户端、令牌、授权码和个人访问令牌的表:

\n\n
php artisan migrate
\n\n

然后运行 passport:install 命令,该命令将创建加密密钥以及用于个人访问令牌和密码授权的客户端:

\n\n
php artisan passport:install
\n\n

命令执行后,您将在控制台中看到两个 client_id 和 client_secret。第一个用于个人访问令牌 (Personal Access Client),第二个用于密码授权 (Password Grant Client)。将它们保存到 .env 文件中:

\n\n
PASSPORT_PERSONAL_ACCESS_CLIENT_ID=1\nPASSPORT_PERSONAL_ACCESS_CLIENT_SECRET=your-secret-here\nPASSPORT_PASSWORD_GRANT_CLIENT_ID=2\nPASSPORT_PASSWORD_GRANT_CLIENT_SECRET=your-secret-here
\n\n

接下来,将 trait Laravel\\Passport\\HasApiTokens 添加到 User 模型 (app/Models/User.php) 中:

\n\n
<?php\n\nnamespace App\\Models;\n\nuse Illuminate\\Foundation\\Auth\\User as Authenticatable;\nuse Illuminate\\Notifications\\Notifiable;\nuse Laravel\\Passport\\HasApiTokens;\n\nclass User extends Authenticatable\n{\n    use HasApiTokens, Notifiable;\n\n    protected $fillable = [\n        'name', 'email', 'password',\n    ];\n\n    protected $hidden = [\n        'password', 'remember_token',\n    ];\n}
\n\n

在 config/auth.php 文件中,将认证驱动更改为 passport:

\n\n
'guards' => [\n    'api' => [\n        'driver' => 'passport',\n        'provider' => 'users',\n    ],\n],
\n\n

最后,在 app/Providers/AuthServiceProvider.php 文件的 boot() 方法中添加 Passport::routes() 调用:

\n\n
<?php\n\nna                    

推荐