0

0

Laravel Sanctum 替代 Passport?轻量级 API 认证方案

星降

星降

发布时间:2025-04-07 09:50:25

|

754人浏览过

|

来源于php中文网

原创

sanctum 是 passport 的轻量级替代方案,适用于 api 认证。1) sanctum 通过生成 api 令牌简化认证过程,适用于不需要复杂 oauth2 流程的应用。2) 它支持 spa 和移动应用认证,配置简单,性能高。3) 使用示例包括基本用法和高级用法,如为不同设备生成令牌。4) 优化建议包括使用缓存、限制令牌数量和定期轮换令牌。

Laravel Sanctum 替代 Passport?轻量级 API 认证方案

引言

在开发 API 时,认证和授权是不可或缺的部分。Laravel 提供了多种解决方案,其中 Passport 和 Sanctum 是两个常见的选择。如果你正在寻找一个轻量级的 API 认证方案,Sanctum 无疑是一个值得考虑的替代方案。本文将探讨为什么 Sanctum 可以作为 Passport 的替代品,并详细介绍其优势和使用方法。

通过阅读本文,你将了解到 Sanctum 的核心概念、如何在项目中实施 Sanctum,以及在实际应用中如何优化和最佳实践。

基础知识回顾

在深入探讨 Sanctum 之前,让我们先回顾一下 Laravel 中的认证和授权基础知识。Laravel 提供了强大的认证系统,支持多种认证方式,如会话认证、API 认证等。Passport 是一个基于 OAuth2 的认证解决方案,适用于需要复杂授权流程的应用。而 Sanctum 则是一个轻量级的认证系统,专为 API 设计,支持 SPA(单页面应用)和移动应用的认证。

核心概念或功能解析

Sanctum 的定义与作用

Sanctum 是一个轻量级的认证系统,旨在简化 API 认证过程。它通过生成 API 令牌来验证用户身份,适用于不需要复杂 OAuth2 流程的应用。Sanctum 的主要优势在于其简单性和灵活性,它可以轻松地集成到现有的 Laravel 项目中,并且不需要像 Passport 那样进行复杂的配置。

让我们看一个简单的 Sanctum 示例:

// 在 User 模型中添加 HasApiTokens trait
use Laravel\Sanctum\HasApiTokens;

class User extends Authenticatable
{
    use HasApiTokens, Notifiable;

    // ...
}

// 在 API 路由中使用 Sanctum 中间件
Route::middleware('auth:sanctum')->get('/user', function (Request $request) {
    return $request->user();
});

这个示例展示了如何在 User 模型中使用 Sanctum 的 HasApiTokens trait,以及如何在 API 路由中使用 Sanctum 中间件来保护路由。

Sanctum 的工作原理

Sanctum 通过生成和验证 API 令牌来实现认证。当用户登录时,Sanctum 会生成一个唯一的 API 令牌,这个令牌可以存储在客户端(如浏览器的 localStorage 或移动应用的本地存储中)。每次请求 API 时,客户端会将这个令牌发送到服务器,Sanctum 会验证令牌的有效性,从而确认用户身份。

Sanctum 的实现原理相对简单,它不依赖于 OAuth2 协议,而是通过简单的令牌验证来实现认证。这使得 Sanctum 的性能更高,配置更简单,同时也减少了潜在的安全风险。

使用示例

基本用法

让我们看一个基本的 Sanctum 用法示例:

塔猫ChatPPT
塔猫ChatPPT

塔猫官网提供AI一键生成 PPT的智能工具,帮助您快速制作出专业的PPT。塔猫ChatPPT让您的PPT制作更加简单高效。

下载
// 生成 API 令牌
$user = User::find(1);
$token = $user->createToken('auth_token')->plainTextToken;

// 使用 API 令牌进行认证
Route::middleware('auth:sanctum')->get('/user', function (Request $request) {
    return $request->user();
});

在这个示例中,我们首先为用户生成一个 API 令牌,然后使用 Sanctum 中间件来保护 /user 路由,只有携带有效令牌的请求才能访问这个路由。

高级用法

Sanctum 还支持更高级的用法,例如为不同的设备生成不同的令牌:

// 为不同的设备生成不同的令牌
$user = User::find(1);
$tokenForDevice1 = $user->createToken('device1_token', ['device:1'])->plainTextToken;
$tokenForDevice2 = $user->createToken('device2_token', ['device:2'])->plainTextToken;

// 使用设备令牌进行认证
Route::middleware('auth:sanctum')->get('/user', function (Request $request) {
    $user = $request->user();
    $abilities = $user->tokenCan('device:1') ? 'Device 1' : 'Device 2';
    return ['user' => $user, 'abilities' => $abilities];
});

在这个示例中,我们为不同的设备生成不同的令牌,并在请求中验证设备的权限。这种方法可以用于更细粒度的权限控制。

常见错误与调试技巧

在使用 Sanctum 时,可能会遇到一些常见的问题,例如令牌过期或无效。以下是一些调试技巧:

  • 检查令牌是否正确生成和存储:确保在生成令牌时没有错误,并且令牌被正确存储在客户端。
  • 验证令牌有效性:在服务器端,使用 Sanctum 的验证方法来检查令牌的有效性。
  • 处理令牌过期:Sanctum 支持令牌过期时间,可以通过配置文件来设置令牌的过期时间,并在客户端实现令牌刷新机制。

性能优化与最佳实践

在实际应用中,优化 Sanctum 的使用可以提高 API 的性能和安全性。以下是一些优化和最佳实践建议:

  • 使用缓存:将用户信息和令牌信息缓存起来,可以减少数据库查询,提高响应速度。
  • 限制令牌数量:为了防止令牌泄露,可以限制每个用户生成的令牌数量。
  • 定期轮换令牌:为了提高安全性,可以定期轮换令牌,确保即使令牌泄露,也不会长期有效。

在编写代码时,保持代码的可读性和维护性也是非常重要的。以下是一个优化后的 Sanctum 使用示例:

// 使用缓存优化用户信息获取
Route::middleware('auth:sanctum')->get('/user', function (Request $request) {
    $user = Cache::remember('user_' . $request->user()->id, 3600, function () use ($request) {
        return $request->user();
    });
    return $user;
});

// 限制令牌数量
$user = User::find(1);
if ($user->tokens()->count() < 5) {
    $token = $user->createToken('auth_token')->plainTextToken;
} else {
    // 处理令牌数量超限的情况
}

通过这些优化和最佳实践,可以确保 Sanctum 在实际应用中发挥最大效用,同时保持代码的简洁和高效。

总的来说,Sanctum 作为一个轻量级的 API 认证方案,具有简单、灵活和高效的特点,是 Passport 的一个优秀替代品。希望本文能帮助你更好地理解和使用 Sanctum,从而在你的 Laravel 项目中实现高效的 API 认证。

相关专题

更多
laravel组件介绍
laravel组件介绍

laravel 提供了丰富的组件,包括身份验证、模板引擎、缓存、命令行工具、数据库交互、对象关系映射器、事件处理、文件操作、电子邮件发送、队列管理和数据验证。想了解更多laravel的相关内容,可以阅读本专题下面的文章。

319

2024.04.09

laravel中间件介绍
laravel中间件介绍

laravel 中间件分为五种类型:全局、路由、组、终止和自定。想了解更多laravel中间件的相关内容,可以阅读本专题下面的文章。

277

2024.04.09

laravel使用的设计模式有哪些
laravel使用的设计模式有哪些

laravel使用的设计模式有:1、单例模式;2、工厂方法模式;3、建造者模式;4、适配器模式;5、装饰器模式;6、策略模式;7、观察者模式。想了解更多laravel的相关内容,可以阅读本专题下面的文章。

370

2024.04.09

thinkphp和laravel哪个简单
thinkphp和laravel哪个简单

对于初学者来说,laravel 的入门门槛较低,更易上手,原因包括:1. 更简单的安装和配置;2. 丰富的文档和社区支持;3. 简洁易懂的语法和 api;4. 平缓的学习曲线。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

371

2024.04.10

laravel入门教程
laravel入门教程

本专题整合了laravel入门教程,想了解更多详细内容,请阅读专题下面的文章。

81

2025.08.05

laravel实战教程
laravel实战教程

本专题整合了laravel实战教程,阅读专题下面的文章了解更多详细内容。

64

2025.08.05

laravel面试题
laravel面试题

本专题整合了laravel面试题相关内容,阅读专题下面的文章了解更多详细内容。

67

2025.08.05

什么是中间件
什么是中间件

中间件是一种软件组件,充当不兼容组件之间的桥梁,提供额外服务,例如集成异构系统、提供常用服务、提高应用程序性能,以及简化应用程序开发。想了解更多中间件的相关内容,可以阅读本专题下面的文章。

178

2024.05.11

C++ 高级模板编程与元编程
C++ 高级模板编程与元编程

本专题深入讲解 C++ 中的高级模板编程与元编程技术,涵盖模板特化、SFINAE、模板递归、类型萃取、编译时常量与计算、C++17 的折叠表达式与变长模板参数等。通过多个实际示例,帮助开发者掌握 如何利用 C++ 模板机制编写高效、可扩展的通用代码,并提升代码的灵活性与性能。

2

2026.01.23

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Laravel---API接口
Laravel---API接口

共7课时 | 0.6万人学习

ThinkPHP6.x API接口--十天技能课堂
ThinkPHP6.x API接口--十天技能课堂

共14课时 | 1.1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号