本文目录导读:

在 Laravel 项目中,Sanctum 和 Passport 是两种主流的 API 认证方案,它们各有侧重,选择哪一个,完全取决于你的项目类型和应用场景。
以下是从多个维度进行的详细对比和选型建议:
核心定位与适用场景
| 特性 | Laravel Sanctum | Laravel Passport |
|---|---|---|
| 核心定位 | 轻量级,专为 SPA(单页应用) 和 移动端 设计的简单令牌认证。 | 重量级,完整实现 OAuth 2.0 协议的官方包。 |
| 适用场景 | - 前后端分离的 SPA(如 Vue/React) - 移动端 App(小而美) - 仅需简单的 API 令牌验证 - 内置飞镖/轮播图等简单权限控制 |
- 第三方开发者需要接入你的 API(如开放平台) - 多个独立客户端(不同 App/网站)需要授权登录 - 需要标准的 OAuth 2.0 授权码模式、刷新令牌机制 - 复杂的权限和作用域(Scopes)管理 |
认证机制差异(重中之重)
这是两者最大的区别:
-
Passport(标准 OAuth 2.0):
- 通过 授权码(Authorization Code) 或 密码授权(Password Grant) 获取
access_token,并配套refresh_token(刷新令牌)。 - 令牌有过期时间,需要刷新机制。
- 支持作用域(Scopes/权限范围),非常完善,适合大型复杂系统。
- 通过 授权码(Authorization Code) 或 密码授权(Password Grant) 获取
-
Sanctum(个人访问令牌 / SPA Cookie):
- 模式一(SPA):基于 Cookie 的 Session 认证,利用了 Laravel 内置的 Session 中间件,自动处理 CSRF 防护,无需每次发送 Bearer Token。
- 模式二(移动端):基于个人访问令牌(Personal Access Token),这个令牌是长期有效的(除非手动吊销),永远不会过期,它仅仅是存储在数据库中的一段随机哈希字符串。
复杂程度与维护成本
| 维度 | Sanctum | Passport |
|---|---|---|
| 安装配置 | 极简,一个 php artisan install:api 命令即可。 |
复杂,需要执行迁移、发布配置、生成加密密钥(php artisan passport:install),需要创建 OAuth Client。 |
| 数据库表 | 只需 2 张表(personal_access_tokens)。 |
需要至少 4-5 张表(oauth_clients, oauth_auth_codes, oauth_access_tokens, oauth_refresh_tokens, oauth_personal_access_clients)。 |
| 学习曲线 | 低,几乎无 OAuth 概念。 | 高,需要理解 OAuth 2.0 的授权流程。 |
安全性对比
- Passport:因为支持刷新令牌,如果长期令牌泄露,风险较大;但标准 OAuth 允许在服务端强制令牌失效和刷新,安全性较高。
- Sanctum:
- 对于 SPA:安全性极高,因为依赖 Session + Cookie,浏览器自动处理,且易受 CSRF 保护。
- 对于 移动端:令牌是永久的,如果令牌泄露,除非你在数据库中手动删除该条记录,否则攻击者可以永久使用。风险较高。
选型决策建议(直接给结论)
| 你的项目情况 | 推荐选择 |
|---|---|
| Vue/React + Laravel(SPA),且用户主要在自己网站内登录 | Sanctum ✅ |
| 移动 App,需要访问自己的 API,且不需要复杂第三方授权 | Sanctum ✅(简单快捷) |
| 移动 App,需要刷新令牌,或有高安全性要求(如金融、医疗) | Passport |
| 开放 API,允许第三方开发者(如微信开放平台、GitHub)接入 | Passport ✅ |
| 需求快速开发,不想折腾 OAuth 授权流程 | Sanctum |
| 需要精细控制用户权限(作用域/Scopes),如“只读权限”、“写权限” | Passport |
补充说明(重要)
- 新项目默认选 Sanctum:Laravel 官方文档已经将 Sanctum 列为默认的 API 认证方案(甚至在新版 Laravel 中,
laravel/ui已不再内置 Passport)。 - Passport 的“密码授权”模式:如果你们内部开发封闭 App,且不想用户跳转网页授权,Passport 也支持密码授权,但它的令牌仍然有过期时间,需要处理刷新逻辑。
- 两者混合使用:在实际项目中,你可以让 Sanctum 负责内部 SPA 认证,同时使用 Passport 向外部开放 API,虽然这会让系统复杂,但在大型企业中常见。
最终总结(一句话)
如果你只想快速实现“用户接口鉴权”,选 Sanctum; 如果你在做“开放平台”或需要“OAuth 2.0 标准流程”,选 Passport。
在 Laravel 10/11/12 时代,默认优先考虑 Sanctum,只有当你明确需要 OAuth 2.0 特性时才切换到 Passport。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播