Laravel认证API:使用Passport实现OAuth2.0认证
你是否正在为Laravel应用构建安全的API认证系统?是否需要让移动应用或第三方服务安全访问你的API?本文将带你一步步实现基于OAuth2.0的完整认证方案,无需复杂配置即可快速上线专业级认证系统。
环境准备与依赖检查
在开始前,请确保你的开发环境满足以下要求:
- PHP >= 8.2(项目要求见composer.json第9行)
- Laravel 12.x(项目要求见composer.json第10行)
- Composer包管理工具
安装与配置Passport
1. 安装Passport包
通过Composer安装Laravel Passport扩展包:
composer require laravel/passport
2. 配置服务提供者
将Passport服务提供者添加到配置文件中。编辑config/app.php,在providers数组中添加:
'providers' => [
// ...其他服务提供者
Laravel\Passport\PassportServiceProvider::class,
],
3. 运行迁移与安装命令
执行数据库迁移生成Passport所需的数据表:
php artisan migrate
运行Passport安装命令,生成加密密钥和默认客户端:
php artisan passport:install
用户模型配置
修改app/Models/User.php,添加HasApiTokens trait:
use Laravel\Passport\HasApiTokens;
class User extends Authenticatable
{
use HasApiTokens, Notifiable;
// ...
}
认证服务配置
1. 配置Auth服务提供者
编辑app/Providers/AppServiceProvider.php,在boot方法中注册Passport路由:
use Laravel\Passport\Passport;
public function boot()
{
$this->registerPolicies();
Passport::routes();
// 设置token有效期
Passport::tokensExpireIn(now()->addDays(15));
Passport::refreshTokensExpireIn(now()->addDays(30));
}
2. 更新认证配置
修改config/auth.php,将API驱动改为passport:
'guards' => [
'api' => [
'driver' => 'passport',
'provider' => 'users',
],
],
实现认证API端点
编辑routes/web.php,添加认证相关路由:
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\Auth\LoginController;
Route::post('/api/login', [LoginController::class, 'apiLogin']);
Route::post('/api/register', [LoginController::class, 'apiRegister']);
Route::middleware('auth:api')->get('/api/user', function (Request $request) {
return $request->user();
});
测试认证流程
获取访问令牌
使用客户端凭证请求访问令牌:
curl -X POST http://your-app.com/oauth/token \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "client_id=CLIENT_ID" \
-d "client_secret=CLIENT_SECRET" \
-d "grant_type=password" \
-d "username=user@example.com" \
-d "password=password"
使用令牌访问受保护资源
curl -X GET http://your-app.com/api/user \
-H "Authorization: Bearer ACCESS_TOKEN"
常见问题解决
- 客户端不存在:确保执行了
php artisan passport:install命令 - token过期:调整
tokensExpireIn和refreshTokensExpireIn配置 - 认证失败:检查用户模型是否正确使用
HasApiTokenstrait
通过以上步骤,你已成功在Laravel应用中实现了基于OAuth2.0的API认证系统。Passport还支持客户端凭证、授权码等多种认证模式,可根据实际需求扩展使用。详细文档可参考Laravel官方文档中关于Passport的章节。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



