0

0

Laravel API认证?Token认证怎样实现?

月夜之吻

月夜之吻

发布时间:2025-09-06 08:55:02

|

414人浏览过

|

来源于php中文网

原创

Laravel API认证推荐使用Token机制,通过配置auth:api中间件和token驱动实现;用户登录后生成唯一api_token并返回,客户端在后续请求中携带Bearer Token;为提升安全,应启用HTTPS、设置Token过期时间、限制IP或用户代理,并优先选用Sanctum(适合简单场景)或Passport(支持OAuth2、第三方集成)以获得更完善的权限管理功能。

laravel api认证?token认证怎样实现?

Laravel API认证的核心在于确保只有授权用户才能访问你的API。Token认证是一种常见的实现方式,它允许客户端在每次请求时携带一个令牌,服务器验证令牌的有效性来决定是否允许访问。

解决方案:

  1. 选择认证驱动: Laravel默认提供多种认证驱动,例如

    token
    passport
    sanctum
    等。
    passport
    sanctum
    更适合复杂的应用,而
    token
    驱动则相对简单,适合快速实现API认证。这里我们假设使用
    token
    驱动,因为它足够简单,能快速上手。

  2. 配置

    config/auth.php
    guards
    数组中,添加一个新的guard,使用
    token
    驱动。同时,在
    providers
    数组中,配置用户provider。例如:

    'guards' => [
        'api' => [
            'driver' => 'token',
            'provider' => 'users',
            'hash' => false,
        ],
    ],
    
    'providers' => [
        'users' => [
            'driver' => 'eloquent',
            'model' => App\Models\User::class,
        ],
    ],

    hash
    设置为
    false
    表示token不进行哈希处理,方便直接比较。

  3. 修改User模型:

    User
    模型中,添加一个
    api_token
    字段。这可以通过migration来完成:

    Schema::table('users', function (Blueprint $table) {
        $table->string('api_token', 80)->after('password')
                              ->unique()
                              ->nullable()
                              ->default(Str::random(60));
    });

    这里使用了

    Str::random(60)
    生成一个随机的token。

  4. 生成Token: 用户注册或登录后,为其生成一个

    api_token
    。这可以在控制器中完成:

    public function register(Request $request)
    {
        // ... 验证逻辑 ...
    
        $user = User::create([
            'name' => $request->name,
            'email' => $request->email,
            'password' => Hash::make($request->password),
            'api_token' => Str::random(60),
        ]);
    
        return response()->json(['api_token' => $user->api_token]);
    }
  5. 使用中间件: Laravel提供了

    auth:api
    中间件来保护API路由。在
    routes/api.php
    中,使用该中间件:

    Route::middleware('auth:api')->get('/user', function (Request $request) {
        return $request->user();
    });
  6. 客户端请求: 客户端在请求API时,需要在header中携带

    Authorization
    字段,值为
    Bearer {api_token}
    。例如:

    Authorization: Bearer your_api_token
  7. 处理Token过期: 简单的Token认证没有过期机制。如果要实现Token过期,可以考虑以下方案:

    • users
      表中添加
      token_expires_at
      字段,记录Token的过期时间。
    • 在中间件中,检查Token是否过期。如果过期,则返回401错误。
    • 提供刷新Token的接口,允许用户在Token过期前刷新Token。

Laravel Sanctum和Passport提供了更完善的Token管理机制,包括Token的scopes、过期时间、刷新Token等功能。如果你的应用需要更复杂的API认证,建议使用这两个包。

Devin
Devin

世界上第一位AI软件工程师,可以独立完成各种开发任务。

下载

Token认证的安全性取决于Token的保密性。请务必使用HTTPS协议来保护Token在传输过程中的安全。

Laravel Sanctum和Passport的区别

Sanctum主要用于单页面应用(SPA)、移动应用和简单的API认证。它使用轻量级的Token,存储在数据库中,可以轻松地为用户生成多个Token,并可以为每个Token分配不同的权限。Sanctum的核心优势在于其简单易用,配置简单,适用于大多数小型和中型项目。

Passport则是OAuth 2.0的完整实现,提供了更强大的功能,例如授权码、客户端凭据、隐式授权等。Passport适用于需要与第三方应用集成的场景,例如,允许其他应用访问你的API。Passport的配置相对复杂,但提供了更高级的功能,例如Token的scopes、刷新Token等。

简单来说,如果你的应用只需要简单的API认证,Sanctum是一个不错的选择。如果你的应用需要与第三方应用集成,Passport则是更好的选择。

如何防止Token被盗用?

防止Token被盗用是一个安全问题,没有绝对安全的方案,但可以采取以下措施来降低风险:

  1. 使用HTTPS: 确保所有API请求都使用HTTPS协议,防止Token在传输过程中被窃听。
  2. Token过期时间: 设置Token的过期时间,即使Token被盗用,也只能在有限的时间内使用。
  3. Token刷新: 提供Token刷新机制,允许用户在Token过期前刷新Token,减少Token被盗用的风险。
  4. IP限制: 限制Token只能从特定的IP地址访问,可以有效防止Token被异地盗用。
  5. 用户代理限制: 限制Token只能从特定的用户代理访问,可以有效防止Token被模拟盗用。
  6. 双因素认证: 启用双因素认证,即使Token被盗用,也需要额外的验证才能访问API。
  7. Token存储: 不要将Token存储在客户端的localStorage或cookie中,这些地方容易被XSS攻击窃取。建议将Token存储在内存中,或者使用更安全的存储方式,例如HTTPOnly cookie。
  8. 监控和日志: 监控API请求,记录所有可疑的活动,例如,大量的失败请求、来自未知IP地址的请求等。

选择哪种认证方式更好?

选择哪种认证方式取决于你的具体需求。以下是一些常见的认证方式及其适用场景:

  1. Basic Auth: 最简单的认证方式,直接在header中携带用户名和密码。不安全,不建议在生产环境中使用。
  2. Token Auth: 使用Token进行认证,相对安全,适用于简单的API认证。
  3. OAuth 2.0: 授权框架,适用于需要与第三方应用集成的场景。
  4. JWT (JSON Web Token): 一种自包含的Token,包含用户信息和签名。适用于分布式系统和微服务架构。
  5. Session Auth: 使用Session进行认证,适用于传统的Web应用。

如果你只需要简单的API认证,Token Auth是一个不错的选择。如果你的应用需要与第三方应用集成,OAuth 2.0则是更好的选择。如果你需要构建分布式系统和微服务架构,JWT则是一个不错的选择。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

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

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

320

2024.04.09

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

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

278

2024.04.09

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

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

372

2024.04.09

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

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

374

2024.04.10

laravel入门教程
laravel入门教程

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

85

2025.08.05

laravel实战教程
laravel实战教程

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

65

2025.08.05

laravel面试题
laravel面试题

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

68

2025.08.05

什么是分布式
什么是分布式

分布式是一种计算和数据处理的方式,将计算任务或数据分散到多个计算机或节点中进行处理。本专题为大家提供分布式相关的文章、下载、课程内容,供大家免费下载体验。

329

2023.08.11

俄罗斯Yandex引擎入口
俄罗斯Yandex引擎入口

2026年俄罗斯Yandex搜索引擎最新入口汇总,涵盖免登录、多语言支持、无广告视频播放及本地化服务等核心功能。阅读专题下面的文章了解更多详细内容。

158

2026.01.28

热门下载

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

精品课程

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

共7课时 | 0.6万人学习

PHP自制框架
PHP自制框架

共8课时 | 0.6万人学习

PHP面向对象基础课程(更新中)
PHP面向对象基础课程(更新中)

共12课时 | 0.7万人学习

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

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