Laravel Passport OAuth2服务器搭建教程

冬雪君_7315

冬雪君_7315

2026-05-20

471人浏览

原创

passport 是 oauth2 服务端,需严格按序执行迁移与安装、显式启用路由、正确配置 guard 和请求头,否则必现 404/500/unauthorized;密码模式 username 必须为邮箱,密钥权限与 client 绑定逻辑也常被忽略。

laravel passport oauth2服务器搭建教程

Passport 不是“装完就能发 token”的登录组件,它本质是一个 OAuth2 服务端,必须先建表、生成密钥、配对路由、绑定 guard,漏掉任一环都会导致 404、500 或 Unauthorized —— 尤其是新手常卡在迁移没跑或 Passport::routes() 没启用对应子集。

php artisan migrate 和 passport:install 必须严格按顺序执行

Passport 的所有功能依赖数据库表:比如 oauth_clients 存客户端,oauth_access_tokens 存令牌。不先跑迁移,passport:install 虽然会成功输出 client_id/client_secret,但后续任何发 token 请求都会报 SQLSTATE[42S02]: Base table or view not found。

  • 先确认 config/database.php 中数据库连接可用,再执行:
    php artisan migrate
  • 再运行:
    php artisan passport:install
    ——它会生成 oauth-private.key 和 oauth-public.key,并创建两条默认 client 记录(Personal Access Client 和 Password Grant Client)
  • 如果中途失败或想重来:php artisan migrate:rollback --step=1 回滚 Passport 迁移,清空 migrations 表中相关记录,再重跑
  • 注意:passport:install --force 不会重建表,只覆盖密钥和 client;表结构仍需靠 migrate

Passport::routes() 必须显式启用所需子路由

Passport 默认只注册部分路由,/oauth/token 和 /oauth/authorize 是分开管理的。只写 Passport::routes() 在 Laravel 10+ 里可能不生效,且 forPersonalAccessTokens() 已默认禁用。

Laravel Creem Agent
Laravel Creem Agent

Creem 支付商店助理 — 查询订阅、客户、交易、产品,执行心跳检查,管理本地 Laravel支付商店。

下载
  • 在 app/Providers/AuthServiceProvider.php 的 boot() 方法中,明确启用你需要的路由类型:
    Passport::routes(function ($router) {
        $router->forAccessTokens();        // 必须:密码模式 /token 端点
        $router->forAuthorizationCodes();   // 授权码模式需要:/authorize 端点
        $router->forPersonalAccessTokens(); // 测试用 createToken() 需要:/tokens 等
    });
  • 漏掉 forAccessTokens() → 密码模式请求 /oauth/token 直接 404
  • 漏掉 forAuthorizationCodes() → 第三方网站跳转 /oauth/authorize 报 404
  • 不启用 forPersonalAccessTokens() → $user->createToken() 生成的 token 无法通过 auth:api 中间件校验

auth:api 中间件失效的三个高频原因

即使 token 正确,auth:api 仍返回 401 Unauthorized,大概率不是 token 本身问题,而是 guard 配置或请求头细节出错。

  • 检查 config/auth.php 中 'api' => ['driver' => 'passport'] 是否设置 —— 不是 token,也不是 sanctum
  • 确保请求头为:Authorization: Bearer {access_token},注意:Bearers 后有一个空格,多一个单引号、少一个空格、换行符混入都会导致解析失败
  • 确认 User 模型同时满足两个条件:use Illuminate\Foundation\Auth\User(即继承 Authenticatable) + use Laravel\Passport\HasApiTokens;缺任一,$request->user() 为 null
  • 别用 Auth::user() 测试 API 路由 —— 它默认走 web guard;必须用 Auth::guard('api')->user() 或带 auth:api 中间件的路由

密码模式 username 必须是邮箱,且不能靠模型配置绕过

Passport 内置的 GrantPasswordController 硬编码用 email 字段查用户,哪怕你把 User 模型的 $username 改成 phone,这里也不会自动适配。

  • 换取 token 的 POST 请求体必须含:{"grant_type":"password","client_id":"...","client_secret":"...","username":"user@example.com","password":"xxx"}
  • 若业务要求手机号登录,有两种解法:
    – 改写 App\Http\Controllers\LoginController,手动查 User::where('phone', $request->username)->first(),再调用 $user->createToken()
    – 或在数据库层让 email 字段存手机号(不推荐,语义混乱)
  • 第三方客户端传错 username(如传了 ID 或 nickname),错误信息是 "message": "These credentials do not match our records.",容易误判为密码错

最易被忽略的是密钥文件权限和 client_id 匹配逻辑:storage/oauth-private.key 必须被 Web 服务器用户(如 www-data)可读,否则签名失败;而 createToken() 生成的 token 总是绑定数据库里 personal_access_client = 1 的那条 client,不是 .env 里的 PASSPORT_PERSONAL_ACCESS_CLIENT_ID —— 这个值早已被忽略。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

laravel

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
服务器是什么
服务器是什么

服务器是一种计算机硬件设备或软件程序,它具有强大的计算和存储能力,用请求、存储数据和提供服务。它在互联网中着关重要的作用,为用户提供各种服务和资源。本专题为大家提供服务器相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.15

437

5

连接apple id服务器时出错
连接apple id服务器时出错

连接apple id服务器时出错的原因包括网络连接问题、服务器问题、Apple ID账户问题、设备问题、防火墙或安全软件问题、时间和日期设置问题、Apple服务器维护等。本专题为大家提供apple id相关的文章、下载、课程内容,供大家免费下载体验。

2023.09.08

900

5

搭建互联网服务器
搭建互联网服务器

搭建互联网服务器需要:1、选择合适的硬件和操作系统,第一步是选择合适的硬件和操作系统;2、安装和配置操作系统,是搭建互联网服务器的关键步骤;3、安装和配置服务器软件,是搭建互联网服务器的下一步,常见的服务器软件包括Apache、Nginx、Tomcat等;4、配置防火墙和安全性,是搭建互联网服务器的重要步骤;5、域名解析和配置,是搭建互联网服务器的最后一步。

2023.09.19

2832

5

如何查看服务器状态
如何查看服务器状态

查看服务器状态的方法有使用命令行工具、图形界面工具、监控工具、日志文件和远程管理工具等。本专题为大家提供服务器状态相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.09

956

5

服务器域名转接慢怎么解决
服务器域名转接慢怎么解决

服务器域名转接慢的解决办法有DNS优化、服务器优化、CDN加速、前端优化和网络优化等。本专题为大家提供服务器相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.17

849

5

服务器评测软件
服务器评测软件

服务器评测软件有PassMark Software、CPU-Z、GPU-Z、CrystalDiskMark、IOmeter、JMeter、LoadRunner、Apache Bench等等。详细介绍:1、PassMark Software是一款综合性的服务器性能测试软件,可以评估服务器在各种负载条件下的性能;2、CPU-Z是一款可以提供服务器CPU详细信息的软件等等。

2023.10.17

434

3

如何开启TFTP服务器
如何开启TFTP服务器

开启TFTP服务器的步骤包括选择TFTP服务器软件、下载和安装软件、配置TFTP服务器以及启动和测试服务器等。本专题为大家提供服务器相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.18

2576

4

服务器负载不兼容怎么解决
服务器负载不兼容怎么解决

解决方法:1、增加服务器资源;2、负载均衡;3、优化应用程序;4、增加缓存机制;5、分布式架构;6、限流和熔断;7、自动化扩容。想知道更详细服务器负载不兼容的解决方法,可以访问本专题下面的文章。

2023.10.20

4772

4

宽带如何接入服务器
宽带如何接入服务器

宽带接入服务器的方法有ADSL宽带接入服务器、光纤接入服务器、无线接入服务器和以太网接入服务器等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.20

767

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
如何安装 Composer
如何安装 Composer

共1课时 | 206人学习

Composer手册
Composer手册

共0课时 | 0人学习