Laravel API 认证

发布于 作者:

API Authentication in Laravel image

说到 Laravel 中的认证,有很多选择。但是,当谈到 API 认证时,我们应该使用什么呢?

传统上,我们会依赖于像 JSON Web Token 这样的东西来进行 API 认证,类似于基于会话的 Web 认证。您用凭据交换一些可以提供您长时间访问的东西。

然后,我们开始使用 Laravel Passport,这是一个出色的 OAuth 实现,您可以使用它来为您的 Laravel 应用程序提供 OAuth 访问权限,无论是服务器到服务器认证、移动认证还是其他类型的认证。很长一段时间,我们坚持使用 Laravel Passport 和密码授权类型,这使我们能够将我们的凭据与 OAuth 应用程序详细信息一起发送,然后我们会得到一个访问令牌和一个刷新令牌 - 使我们能够访问并能够在令牌过期时刷新该访问权限。但是,这种方式不再被推荐作为我们以前使用的认证机制。

那么我们现在该怎么办?Sanctum 是唯一推荐的选择吗?好吧,是也不是。Sanctum 被设计为 Passport 的轻量级替代品,但实际上,它已经实现了比这更多的东西。无论您是在构建 Web 应用程序、客户端实现还是介于两者之间的东西 - sanctum 已经迅速成为 Laravel 生态系统中金标准的认证机制。

那么,这对 API 意味着什么呢?我们每次想要认证时都需要传递令牌名称吗?当然,您可以这样做 - 这不会伤害任何人。但是,如何在 Laravel 中对我的 API 进行认证?

让我们来看看我的方法,看看它为什么有效/有意义。它始于用户的凭据 - 就像任何合适的认证机制一样。我们将这些凭据发送到我们的登录或注册端点 - Laravel 为我们做一些魔法 (取决于我们使用的包)。

假设我们使用的是 Laravel BreezeJetstream。在这种情况下,提供的认证将为我们创建一个基于会话的 cookie - 我们的实现随后可以将其用于每个后续请求以证明其已认证状态。现在,这让我有点困惑。我在想我的令牌应该在哪里,除了 cookie 之外,我还有什么东西可以证明我已认证?我一直习惯于处理这个令牌或那个令牌,这样我就可以使用它来证明我的身份。cookie 是用于 Web 的,对吧?我没有把我的 API 看作一个 Web API,这表明我们有时都会有点天真。

假设我要构建一个 CLI 应用程序、移动应用程序,或者一些需要与我的本地系统一起作为可安装内容工作的集成。在这种情况下,我们可以使用 Sanctum 传递一个名称来创建需要存储的令牌 - 这感觉很自然。但是,我们的 API 可能通过单页应用程序进行集成 - 甚至另一个也使用 Laravel 构建的应用程序。这部分并不重要,因为它不是我们正在安装的东西。

处理认证的最佳方法是遵循我所谓的简单指南。

您正在构建一些被访问,而不是被安装的东西。在这种情况下,您应该使用 Laravel Sanctum 以及基于 cookie 的认证。可以将 cookie 配置为与您的访问需求一样长或短,当访问停止时,认证也可以停止。

您正在构建一些安装在用户设备上的东西。在这里,我们需要做出几个选择。访问是否需要基于身份控制?换句话说 - 应用程序是否可以访问所有内容,并且没有授权层?如果是这种情况,使用客户端凭据的 Laravel Passport 是一个不错的选择。Laravel Passport 有一种授权类型称为客户端凭据:您认证一个客户端而不是一个用户 - 因此任何拥有客户端访问权限的人都可以控制系统。您可以使用 PKCE 进一步实现这一点,在 PKCE 中,您无法保证客户端秘密的机密性。

如果您需要认证一个用户而不是一个客户端 - 那么请依靠 Laravel Sanctum,并为已安装的应用程序传递一个唯一的名称 - 这样您就可以存储提供的令牌并重复使用它。

使用 Laravel Sanctum 的最大问题是,您必须获取一个跨站点请求 cookie 来向您的 Laravel API 发出请求。当构建一个 SPA 时,这不是问题,并且比将 JSON Web Token 存储在本地存储中是一个更好的方法。

Steve McDougall photo

技术作家,任职于 Laravel 新闻,开发人员倡导者,任职于 Treblle。API 专家,经验丰富的 PHP/Laravel 工程师。 YouTube 直播主.

Cube

Laravel 新闻稿

加入 40,000 多位其他开发者,永远不会错过新的技巧、教程等。

Laravel Forge logo

Laravel Forge

轻松创建和管理您的服务器,并在几秒钟内部署您的 Laravel 应用程序。

Laravel Forge
Tinkerwell logo

Tinkerwell

Laravel 开发人员必备的代码运行器。使用 AI、自动完成功能和对本地和生产环境的即时反馈进行 Tinker。

Tinkerwell
No Compromises logo

不妥协

Joel 和 Aaron,来自不妥协播客的两名经验丰富的开发者,现在可以为您的 Laravel 项目提供雇佣服务。 ⬧ 每月 7500 美元的固定费率。 ⬧ 没有冗长的销售流程。 ⬧ 没有合同。 ⬧ 100% 退款保证。

不妥协
Kirschbaum logo

Kirschbaum

提供创新和稳定性,以确保您的 Web 应用程序取得成功。

Kirschbaum
Shift logo

Shift

正在运行旧版本的 Laravel?立即自动执行 Laravel 升级和代码现代化,以保持应用程序的新鲜。

Shift
Bacancy logo

Bacancy

让您的项目充满活力,只需每月 2500 美元,即可获得拥有 4-6 年经验的经验丰富的 Laravel 开发人员。获得 160 小时的专业知识和 15 天的无风险试用。立即预约电话!

Bacancy
Lucky Media logo

Lucky Media

现在就变得幸运 - Laravel 开发的理想选择,拥有超过十年的经验!

Lucky Media
Lunar: Laravel E-Commerce logo

Lunar:Laravel 电子商务

Laravel 的电子商务。一个开源软件包,将现代无头电子商务功能的功能带入 Laravel。

Lunar:Laravel 电子商务
LaraJobs logo

LaraJobs

官方 Laravel 工作板

LaraJobs
SaaSykit: Laravel SaaS Starter Kit logo

SaaSykit:Laravel SaaS 启动工具包

SaaSykit 是一款 Laravel SaaS 启动工具包,它包含运行现代 SaaS 所需的所有功能。支付、精美结帐、管理面板、用户仪表板、身份验证、准备好的组件、统计信息、博客、文档等等。

SaaSykit:Laravel SaaS 启动工具包
Rector logo

Rector

您在无缝 Laravel 升级、降低成本和加速创新方面的合作伙伴,为成功企业提供支持

Rector
MongoDB logo

MongoDB

通过 MongoDB 和 Laravel 的强大集成来增强您的 PHP 应用程序,使开发人员能够轻松高效地构建应用程序。支持事务性、搜索、分析和移动用例,同时使用熟悉的 Eloquent API。了解 MongoDB 如何将灵活、现代的数据库转化为您的 Laravel 应用程序。

MongoDB
Maska is a Simple Zero-dependency Input Mask Library image

Maska 是一个简单的零依赖输入掩码库

阅读文章
Add Swagger UI to Your Laravel Application image

将 Swagger UI 添加到您的 Laravel 应用程序

阅读文章
Assert the Exact JSON Structure of a Response in Laravel 11.19 image

在 Laravel 11.19 中断言响应的 JSON 结构

阅读文章
Build SSH Apps with PHP and Laravel Prompts image

使用 PHP 和 Laravel 提示构建 SSH 应用程序

阅读文章
Building fast, fuzzy site search with Laravel and Typesense image

使用 Laravel 和 Typesense 构建快速、模糊的网站搜索

阅读文章
Add Comments to your Laravel Application with the Commenter Package image

使用 Commenter 包为您的 Laravel 应用程序添加评论

阅读文章