如何在Laravel中实现API认证

laravel中实现api认证的首选方案是使用laravel sanctum,它轻量且适用于spa、移动应用及简单api令牌需求。1. 安装sanctum并发布配置文件和迁移表;2. 在user模型中引入hasapitokens trait;3. 使用auth:sanctum中间件保护api路由;4. 通过createtoken生成带能力的令牌并在客户端请求头中携带;5. 对spa可配置会话cookie认证方式。相比passport,sanctum更简洁,适合多数场景;而jwt、session认证和basic auth则适用于特定用例。

如何在Laravel中实现API认证

在Laravel中实现API认证,最常见也最推荐的方式是使用Laravel Sanctum。它能很好地处理单页面应用(SPA)、移动应用以及简单的API令牌认证需求,轻量且高效。如果你需要更复杂的OAuth2功能,比如允许第三方应用访问你的API,那么Laravel Passport会是你的选择。绝大多数情况下,Sanctum就能满足日常开发所需。

解决方案

要在Laravel中实现API认证,我们通常会选择Laravel Sanctum。它为SPA、移动应用和简单的API令牌提供了简洁的认证系统。

1. 安装与配置Sanctum首先,把Sanctum请到你的项目里:

composer require laravel/sanctum

然后发布其配置文件和运行数据库迁移:

php artisan vendor:publish --provider="LaravelSanctumSanctumServiceProvider"php artisan migrate

这会创建一张 personal_access_tokens 表,用来存储用户的API令牌。

2. 用户模型准备在你的 AppModelsUser 模型中,引入 HasApiTokens trait:

// app/Models/User.phpuse LaravelSanctumHasApiTokens;use IlluminateNotificationsNotifiable;use IlluminateFoundationAuthUser as Authenticatable;class User extends Authenticatable{    use HasApiTokens, Notifiable;    // ... 其他模型内容}

这个trait会为你的用户模型添加管理API令牌的方法。

3. API路由保护routes/api.php 文件中,你可以使用 auth:sanctum 中间件来保护你的API路由:

// routes/api.phpuse IlluminateHttpRequest;use IlluminateSupportFacadesRoute;Route::middleware('auth:sanctum')->get('/user', function (Request $request) {    return $request->user();});Route::post('/logout', function (Request $request) {    $request->user()->currentAccessToken()->delete();    return response()->noContent();})->middleware('auth:sanctum');// 你的其他受保护API路由Route::middleware('auth:sanctum')->group(function () {    Route::get('/projects', function () {        // ...    });    Route::post('/projects', function () {        // ...    });});

任何访问 /user/projects 路由的请求,都需要携带有效的Sanctum令牌或通过会话认证。

4. 令牌的生成与使用对于移动应用或第三方API调用,你需要为用户生成API令牌。这通常在一个认证控制器中完成:

// 例如:app/Http/Controllers/Api/AuthController.phpuse IlluminateHttpRequest;use IlluminateSupportFacadesAuth;use AppModelsUser;use IlluminateSupportFacadesHash;class AuthController extends Controller{    public function login(Request $request)    {        $request->validate([            'email' => 'required|email',            'password' => 'required',            'device_name' => 'required', // 例如:'iPhone 15 Pro'        ]);        $user = User::where('email', $request->email)->first();        if (! $user || ! Hash::check($request->password, $user->password)) {            return response()->json(['message' => '凭据不匹配'], 401);        }        // 创建令牌,可以指定能力(abilities)        $token = $user->createToken($request->device_name, ['server:update', 'server:delete'])->plainTextToken;        return response()->json(['token' => $token]);    }    public function revokeToken(Request $request)    {        // 撤销当前使用的令牌        $request->user()->currentAccessToken()->delete();        return response()->noContent();    }    public function revokeAllTokens(Request $request)    {        // 撤销用户所有令牌        $request->user()->tokens()->delete();        return response()->noContent();    }}

客户端在后续请求中,需要将这个令牌放在 Authorization 请求头的 Bearer 方案中:Authorization: Bearer YOUR_GENERATED_TOKEN

5. SPA认证 (可选但推荐)如果你在构建SPA,Sanctum还能通过会话Cookie提供认证,而无需手动管理令牌。这需要一些额外的配置:

确保你的SPA和API运行在同一个顶级域名下(例如:app.example.comapi.example.com)。在SPA中,使用Axios等HTTP客户端配置 withCredentialstrue,并确保后端CORS配置允许你的SPA域名。配置 sanctum.stateful 数组,将你的SPA域名添加到其中。确保SPA在登录时,向Laravel后端发送POST请求到 /sanctum/csrf-cookie 路由,以获取CSRF令牌,然后进行登录。

Laravel API认证,为什么Sanctum是首选?

我个人觉得,对于绝大多数我们日常会遇到的API认证场景,Sanctum简直是为我们量身定制的。它最大的魅力在于它的简洁性多功能性。你想想看,一个包就能同时搞定SPA的会话认证(就像传统的Web应用那样,用Cookie),又能搞定移动端或者第三方应用需要的API令牌认证,这多省事儿!

跟Passport比起来,Sanctum简直是轻量级的典范。Passport那套OAuth2的玩意儿,虽然强大,但它为的是解决更宏大的问题——比如你要让Google、Facebook这种第三方服务通过OAuth2协议来访问你的API。它涉及客户端管理、授权码、刷新令牌等一系列复杂流程,搭建起来就挺费劲的。而我们平时写个App后端,或者给Vue、React前端提供API,根本用不着那么重型的武器。Sanctum就是那个“小而美”的解决方案,它直接给你一个纯粹的API令牌管理能力,或者利用Laravel自带的Session机制,让SPA感觉就像在用传统的Web应用一样,省去了令牌存储、刷新等一系列前端的心智负担。

所以,除非你明确知道你的API需要支持OAuth2那种复杂的第三方授权流程,否则,直接上Sanctum,它能让你少掉很多头发。

如何在Laravel中安全地管理API令牌?

管理API令牌可不是生成一个扔给前端就完事儿了,这里面学问还挺多的,稍不留神就可能留下安全隐患。

如知AI笔记 如知AI笔记

如知笔记——支持markdown的在线笔记,支持ai智能写作、AI搜索,支持DeepseekR1满血大模型

如知AI笔记 27 查看详情 如知AI笔记

1. 令牌的生命周期与能力生成令牌时,考虑它的生命周期。如果是给一次性任务或者短期使用的,可以设置短一点的过期时间。Sanctum默认是不设过期时间的,但你可以通过在 config/sanctum.php 中设置 expiration 来控制。

更重要的是,利用Sanctum的“能力”(abilities)特性。你可以为每个令牌分配特定的权限,比如一个令牌只能读取数据,另一个才能写入。

$token = $user->createToken('admin-token', ['user:read', 'user:create', 'user:update', 'user:delete'])->plainTextToken;// 另一个令牌可能只有读取权限$readOnlyToken = $user->createToken('guest-token', ['user:read'])->plainTextToken;

然后在你的API路由或控制器中,通过 tokenCan 方法来检查:

if ($request->user()->tokenCan('user:create')) {    // 允许创建用户}

这比简单的“有权限”或“没权限”要精细得多。

2. 客户端令牌存储前端拿到令牌后,怎么存是个大问题。

Web端(SPA): 尽量避免直接存在 localStorage 里,因为它容易受到XSS攻击。更安全的做法是使用 HttpOnlyCookie。Sanctum在SPA模式下就是这么干的,它利用了Laravel的Session机制,并将Session ID存在HttpOnly Cookie中,前端无需直接操作令牌。移动端: 存储在设备的安全存储区域,比如iOS的Keychain或Android的Keystore,而不是明文存在应用沙盒里。

3. 令牌的撤销机制用户退出登录时,务必撤销当前使用的令牌。Sanctum提供了 currentAccessToken()->delete() 方法来撤销正在使用的令牌。如果用户设备丢失,或者怀疑令牌泄露,你应该提供一个接口让用户可以撤销所有已颁发的令牌($user->tokens()->delete())。这就像你手机丢了,可以在电脑上远程抹掉所有数据一样。

4. 令牌的安全性Sanctum会将令牌的哈希值存储在数据库中,而不是明文。这是基本要求。确保你的数据库连接是安全的,并且数据库本身也受到保护。

5. 速率限制对API接口进行速率限制(Rate Limiting)是防止暴力破解令牌的有效手段。Laravel自带的速率限制中间件非常好用,可以限制每个IP或每个用户在特定时间内的请求次数。

// routes/api.phpRoute::middleware(['auth:sanctum', 'throttle:60,1'])->group(function () {    Route::get('/user', function (Request $request) {        return $request->user();    });});

这表示每分钟只能请求 /user 60次。

除了Sanctum,Laravel还有哪些API认证方案,各自适用场景是什么?

除了Sanctum,Laravel生态里还有几种常见的API认证方案,每种都有它最适合的场景。

1. Laravel Passport (OAuth2)

是什么? Laravel官方提供的OAuth2服务器实现。它完全遵循OAuth2协议,可以让你轻松地为自己的API提供完整的OAuth2认证流程,包括授权码、隐式、客户端凭据和密码授权等多种模式。适用场景: 当你的API需要被第三方应用访问时,Passport是首选。比如,你想构建一个开放平台,允许其他开发者注册他们的应用,并通过OAuth2协议来获取用户授权,进而访问你的API数据。它提供了客户端管理、作用域(scopes)定义等高级功能,适合构建大型、开放的API平台。如果你只是为自己的前端或移动应用提供API,Passport可能会显得过于复杂。

2. 基于Session的认证 (Web认证)

是什么? 这是Laravel默认的Web认证方式,依赖于HTTP Session和Cookie。用户登录后,服务器会创建一个Session,并在Cookie中存储Session ID。后续请求带着这个Cookie,服务器就能识别用户。适用场景: 主要用于传统的Web应用,即前后端不分离或弱分离的项目。当你用Blade模板渲染页面,或者Vue/React应用和Laravel后端在同一个域名下,且前端每次请求都带上Cookie时,这种方式是自然的。但对于纯粹的、无状态的API(尤其是跨域或移动应用),Session认证就不太合适了,因为API通常需要无状态,不依赖服务器Session。

3. Basic Auth (HTTP基本认证)

是什么? 一种非常简单的HTTP认证方式,通过在HTTP请求头中发送用户名和密码的Base64编码字符串进行认证。适用场景: 通常用于内部API调试低安全性要求的场景。它简单易实现,但因为每次请求都发送明文(虽然是Base64编码,但很容易解码)的用户名和密码,所以必须在HTTPS环境下使用,否则极不安全。不适合公开或高安全性的API。

4. 第三方JWT包 (如 tymondesigns/jwt-auth)

是什么? JSON Web Token(JWT)是一种开放标准(RFC 7519),定义了一种紧凑且自包含的方式,用于在各方之间安全地传输信息作为JSON对象。Laravel本身没有内置JWT认证,但有非常流行的第三方包如 tymondesigns/jwt-auth适用场景: 在Sanctum出现之前,JWT在无状态API认证中非常流行。它适用于需要完全无状态的API,并且可能需要跨多个服务共享认证状态的场景。JWT令牌包含用户身份信息,并经过签名,服务器无需查询数据库即可验证令牌的有效性。然而,JWT的令牌撤销相对复杂(因为它是无状态的),通常需要额外的黑名单机制。Sanctum的API令牌模式在很多方面可以替代JWT,并且与Laravel的集成度更高。

选择哪种方案,最终还是要看你的项目需求和安全考量。Sanctum的出现,确实让大多数Laravel API认证变得简单而高效,但理解其他方案的特点,能帮助你在遇到特定场景时做出更明智的决策。

以上就是如何在Laravel中实现API认证的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/425900.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月7日 11:35:34
java后台怎么接一个数组
下一篇 2025年11月7日 11:35:39

相关推荐

  • DeepCode— 港大实验室推出的多Agent代码生成平台

    DeepCode— 港大实验室推出的多Agent代码生成平台DeepCode— 港大实验室推出的多Agent代码生成平台DeepCode— 港大实验室推出的多Agent代码生成平台DeepCode— 港大实验室推出的多Agent代码生成平台

    ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜ MiniMax Agent MiniMax平台推出的Agent智能体助手 334 查看详情 DeepCode是什么 deepcode是由香港大学数据智能实验室研发的一款基于多智能体架构的智能代码…

    2026年9月24日 用户投稿
    100
  • 时区错误怎样校准?时间同步完整解决方法

    时区错误怎样校准?时间同步完整解决方法时区错误怎样校准?时间同步完整解决方法时区错误怎样校准?时间同步完整解决方法时区错误怎样校准?时间同步完整解决方法

    时区错误和时间同步问题通常由系统时区设置错误、硬件时钟漂移或ntp服务异常导致。1.确保系统时间通过ntp服务准确同步,linux可使用timedatectl检查ntp状态并启用systemd-timesyncd或chronyd,windows则开启自动时间同步;2.正确设置本地时区,linux使用…

    2026年9月24日 用户投稿
    100
  • VSCode如何实现代码模式识别 VSCodeAI辅助重构的智能技巧

    ai辅助重构在vscode中依赖lsp解析代码结构并结合ai模型识别模式,1. 首先通过语言服务器协议(lsp)构建抽象语法树,获取变量、函数、作用域等语义信息;2. 然后利用大型语言模型(如github copilot)基于上下文和训练数据预测重构建议;3. 用户可通过右键菜单或快捷键(ctrl+…

    2026年9月24日
    800
  • FramePackLoop— AI视频生成工具,首尾连接生成循环视频

    FramePackLoop— AI视频生成工具,首尾连接生成循环视频FramePackLoop— AI视频生成工具,首尾连接生成循环视频FramePackLoop— AI视频生成工具,首尾连接生成循环视频FramePackLoop— AI视频生成工具,首尾连接生成循环视频

    ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜ Q.AI视频生成工具 支持一分钟生成专业级短视频,多种生成方式,AI视频脚本,在线云编辑,画面自由替换,热门配音媲美真人音色,更多强大功能尽在QAI 73 查看详情 FramePackLoop是…

    2026年9月24日 用户投稿
    000
  • Flyway多数据库与多环境配置:实现测试与生产环境的灵活迁移管理

    本文深入探讨了Flyway在多数据库和多环境场景下的灵活配置策略,旨在解决开发、开发、测试与生产环境数据库迁移的挑战。文章首先分析了测试环境数据库选择的推荐方案,包括使用与生产一致的数据库服务或Testcontainers。随后,详细阐述了Flyway如何通过分离配置文件、编程化配置以及利用占位符来…

    2026年9月24日
    000
  • win11开机后需要很长时间才显示桌面怎么办_win11开机桌面加载慢优化方法

    首先管理开机启动项,禁用非必要程序以减少资源占用;接着执行干净启动排查第三方服务干扰;然后优化硬盘性能,提升磁盘读写效率;再更新显卡与存储驱动确保硬件兼容性;最后运行病毒扫描清除潜在恶意软件,系统响应速度将显著改善。 如果您成功启动了Windows 11系统,但在输入密码或PIN后需要等待很长时间才…

    2026年9月24日
    000
  • 无线鼠标的延迟还能被感知吗?

    无线鼠标延迟已低至0.8-1ms,媲美有线,罗技Lightspeed、雷蛇HyperSpeed技术成熟,办公电竞皆适用,职业选手广泛采用,仅极端电磁干扰、低电量或接收器位置不佳时可能影响性能。 无线鼠标的延迟在绝大多数情况下已经无法被普通用户感知了。 现在的顶级无线技术,比如罗技的Lightspee…

    2026年9月24日
    500
  • laravel怎么使用Str和Arr辅助类的常用方法_laravel Str/Arr辅助类常用方法教程

    Laravel的Str和Arr类提供字符串与数组处理方法,如Str::lower、Str::contains、Arr::get、Arr::pluck等,提升代码可读性与开发效率。 Laravel 提供了两个非常实用的辅助类 Str 和 Arr,用于处理字符串和数组。它们封装了许多常用操作,让代码更简…

    2026年9月24日
    000
  • VS Code微服务开发:Docker与Kubernetes集成

    VS Code通过Docker扩展实现本地容器化开发,支持自动生成Dockerfile、一键构建镜像及devcontainer环境一致性;2. Kubernetes扩展可连接集群并管理资源,结合Bridge to Kubernetes实现本地调试与集群网络集成;3. 使用Skaffold自动化构建部…

    2026年9月24日
    000
  • 使用正则表达式从JSON数组中提取JSON对象

    本文旨在提供一种使用Java正则表达式从包含多个JSON对象的JSON数组中提取单个JSON对象的方法。我们将详细介绍如何构建合适的正则表达式,并提供示例代码演示如何在Java中使用该表达式来实现JSON对象的提取,并对提取后的字符串进行优化处理,移除不必要的空白字符。 从JSON数组中提取JSON…

    2026年9月24日
    000
  • iPhoneXS微信收款语音无法开启怎么办?快速解决语音设置问题

    iPhone XS微信收款语音无法开启,通常由权限未开启、静音模式、音量设置或应用缓存问题导致。首先检查微信麦克风权限是否开启,确认手机未处于静音模式且媒体音量正常;接着重启微信或手机,更新微信和iOS系统至最新版本;再检查微信内“收款到账语音提醒”是否开启;若仍无效,可尝试清理微信缓存或备份后重装…

    2026年9月24日
    000
  • 实现PHP多线程的并发测试_通过测试优化php多线程怎么实现的性能

    PHP虽不原生支持多线程,但可通过pthreads扩展实现真正多线程,适用于ZTS版PHP,适合I/O密集或CPU密集任务;更常用的是curl_multi方式,兼容性好,可高效并发处理HTTP请求,显著提升性能;此外ReactPHP提供异步事件驱动模型,资源占用低,适合高并发非阻塞场景;结合Swoo…

    2026年9月24日
    700
  • PHP+MySQL培训课程的费用性价比分析

    php+mysql培训课程的性价比高,具体体现在:1.课程内容深度和广度,涵盖框架使用和项目经验;2.实用性和就业前景,提供实战项目和就业指导;3.师资力量和教学方式,名师能激发学习热情;4.学习资源和社区支持,提供丰富资料和交流平台。 在考虑报名PHP+MySQL培训课程之前,很多人都会问:这些课…

    2026年9月24日
    100
  • AI PC 新晋狠角色:5000 元价位 Arrow Lake 最优解 惠普战 66 2025 争当全能卷王

    AI PC 新晋狠角色:5000 元价位 Arrow Lake 最优解 惠普战 66 2025 争当全能卷王AI PC 新晋狠角色:5000 元价位 Arrow Lake 最优解 惠普战 66 2025 争当全能卷王AI PC 新晋狠角色:5000 元价位 Arrow Lake 最优解 惠普战 66 2025 争当全能卷王AI PC 新晋狠角色:5000 元价位 Arrow Lake 最优解 惠普战 66 2025 争当全能卷王

    在 5000 元级别的主流商务本市场,长久以来似乎都遵循着一套 ” 潜规则 “:追求性能就得牺牲便携,看重耐用又往往在外观和屏幕上妥协,想要全面的接口以及优质的售后服务,预算就得一加再加。但现在,一个 ” 新晋狠角色 ” 决意打破这一局面。 惠普商用产…

    2026年9月24日 用户投稿
    000
  • 智能平权下,燃油车如何升级?

    智能平权下,燃油车如何升级?智能平权下,燃油车如何升级?智能平权下,燃油车如何升级?智能平权下,燃油车如何升级?

    曾几何时,“智能驾驶是电动车的专属”成为汽车行业的共识。宝马、奔驰、奥迪等传统豪华品牌长期专注于机械精密性和驾驶质感,在智能化布局上尤为谨慎,一度被贴上保守与落后的标签。 与此同时,新能源品牌凭借智能化迅速打开市场缺口,成功构建起“电动即智能、燃油即传统”的认知框架,在舆论和市场销量中占据先机。 ☞…

    2026年9月24日 用户投稿
    000
  • mac怎么使用听写功能_mac听写输入开启方法

    首先启用高级听写功能,进入系统设置→键盘→听写,勾选“使用高级听写”并下载语言包;随后可设置快捷键(如双击Fn键)快速启动语音输入;在支持的应用中也可通过菜单栏“编辑→开始听写”直接调用;最后根据需要配置听写语言、自动纠正及连续听写选项以提升识别准确率。 如果您希望在Mac上通过语音输入文字以提高效…

    2026年9月24日
    200
  • WPS怎么办批量打印文件_WPS多文档批量打印与队列管理步骤

    使用WPS内置批量打印功能,通过工具→批量处理→批量打印添加文件并设置参数后一键打印;2. 在资源管理器中多选文件右键以WPS打开,再在文件菜单中选择打印所有文档;3. 通过控制面板的设备和打印机进入打印队列,可实时监控、暂停或取消任务,确保批量打印过程稳定可控。 如果您需要在短时间内处理多个WPS…

    2026年9月24日
    400
  • 使用MySQL命令行客户端进行交互式管理

    使用MySQL命令行客户端进行交互式管理使用MySQL命令行客户端进行交互式管理使用MySQL命令行客户端进行交互式管理使用MySQL命令行客户端进行交互式管理

    mysql命令行客户端的常用命令包括:1. 使用mysql -u 用户名 -p命令连接数据库;2. 执行show databases;查看所有数据库;3. 使用use 数据库名;选择数据库;4. 使用select * from 表名;查询数据;5. 使用insert into 表名 (列1, 列2)…

    2026年9月24日 用户投稿
    500
  • windows8如何取消开机密码_windows8取消开机密码的操作

    1、通过netplwiz取消密码验证并设置自动登录;2、在控制面板中更改密码为空实现无密码开机;3、使用命令提示符执行net user命令清除账户密码,三者均可实现Windows 8.1启动时跳过密码输入。 如果您希望在启动Windows 8系统时跳过手动输入密码的步骤,可以直接通过系统内置工具配置…

    2026年9月24日
    000
  • 赋能AI未来!康盈半导体 AI 应用存储新品登陆 elexcon 2025 展会

    赋能AI未来!康盈半导体 AI 应用存储新品登陆 elexcon 2025 展会赋能AI未来!康盈半导体 AI 应用存储新品登陆 elexcon 2025 展会赋能AI未来!康盈半导体 AI 应用存储新品登陆 elexcon 2025 展会赋能AI未来!康盈半导体 AI 应用存储新品登陆 elexcon 2025 展会

    8 月 26 日,中国电子、嵌入式及半导体先进封测行业的风向标 ——elexcon2025 深圳国际电子展暨嵌入式展盛大开幕。作为本届展会的重磅环节之一,国产存储领军品牌康盈半导体携新而来,以 “小而不凡,速启 ai 未来” 为核心主题,正式发布 2025 年存储新品,同步拉开面向 ai 终端应用的…

    2026年9月24日 用户投稿
    000

发表回复

登录后才能评论
关注微信