Laravel Passport路由通过AuthServiceProvider的boot()中Passport::routes()自动注册,而非手动写在web.php或api.php中;该调用默认注册/oauth/authorize、/oauth/token等四类标准端点,且必须在php artisan migrate和passport:install之后执行,否则因表缺失或密钥未生成导致500或401错误。

Laravel Passport 的路由不是在 routes/web.php 或 routes/api.php 里手动写,而是通过服务提供者自动注册。核心动作是在 AuthServiceProvider 的 boot() 方法中调用 Passport::routes()。
✅ 正确注册方式
在 app/Providers/AuthServiceProvider.php 中:
use Laravel\Passport\Passport;
public function boot()
{
$this->registerPolicies();
Passport::routes(); // ← 关键这一行
}这会默认注册四类标准 OAuth2 路由:
-
/oauth/authorize(授权端点,用于授权码模式) -
/oauth/token(发放、刷新 access_token) -
/oauth/tokens(查看/撤销个人访问令牌) -
/oauth/clients(管理客户端)
⚠️ 注意:
Passport::routes()必须在php artisan migrate和php artisan passport:install之后调用,否则数据库表缺失会导致 500 错误或路由不可用。
? 按需定制注册哪些路由
如果你只用密码模式(比如前后端分离的登录),不需要授权码流程或客户端管理,可以精简注册范围:
Passport::routes(function ($router) {
$router->forAccessTokens(); // 必需:支持 /oauth/token
// $router->forAuthorizationCodes(); // 授权码模式(第三方接入才需要)
// $router->forPersonalAccessTokens(); // 个人令牌(如前端调试用,Laravel 10+ 默认关闭)
// $router->forClients(); // 客户端管理界面(通常仅后台用)
});还可以加前缀或中间件:
Passport::routes(null, ['prefix' => 'api/v1/oauth', 'middleware' => 'throttle:60,1']);
❗ 常见错误点
- 忘记运行
php artisan migrate→ 缺少oauth_clients等表,路由报错 - 没执行
php artisan passport:install→ 没有 client 和密钥,/oauth/token返回 401 或 500 - 在
web.php或api.php里重复定义/oauth/*路由 → 冲突或 404 -
config/auth.php中guards.api.driver没设为'passport'→auth:api中间件不生效
? 补充说明
-
Passport::routes()是“一次性注册”,它内部调用的是 Laravel 的RouteRegistrar,不会重复绑定 - 所有路由都属于 API 类型,不带 CSRF 保护,也不走
web中间件栈 - 请求头必须是
Authorization: Bearer {token},注意Bearer后有一个空格
不复杂但容易忽略。



















