0

0

composer怎么安装JWT扩展_composer怎么配置接口鉴权功能【手册】

裘德小鎮的故事

裘德小鎮的故事

发布时间:2026-03-14 09:03:12

|

722人浏览过

|

来源于php中文网

原创

应直接安装 firebase/php-jwt:^6.10,避免使用非官方维护的TP JWT插件;密钥须来自环境变量,签发需强制设置 iat/exp/jti,中间件必须放行 OPTIONS 请求。

composer怎么安装jwt扩展_composer怎么配置接口鉴权功能【手册】

直接装 firebase/php-jwt:^6.10,别碰 TP 封装的“JWT 插件”

ThinkPHP 官方不维护 JWT 认证组件,市面上所谓“TP JWT 插件”多数是简单封装、硬编码密钥、没处理 OPTIONS 预检、或依赖过时的 php-jwt 版本(比如 lcobucci/jwt 3.3),2026 年已严重脱节。最稳路径就是跳过中间层,直用官方维护的 firebase/php-jwt——它无依赖、轻量、文档清晰,且明确支持 PHP 7.4+ 和 TP6/TP8。

  • composer require firebase/php-jwt:^6.10 是当前(2026)兼容性最好、无弃用警告的稳定版;^7.0 要求 PHP 8.1+,且 JWT::encode() 第三个参数从 string 改成 array,会直接报错
  • 别执行 php think jwt:createthans/tp-jwt-auth 这类命令——它们生成的 jwt.php 配置文件把密钥、算法、有效期全塞进去,一改就要清缓存、重测逻辑,还容易漏掉 leeway 导致验签失败
  • 环境变量才是密钥唯一可信来源:$_ENV['JWT_SECRET'],不是配置文件,更不是代码里写死的 'example_key'

手动封装 JwtService 类,而不是靠配置驱动

把签发、解析、校验逻辑收口到一个服务类里,比塞进 config/jwt.php 更可控、更易调试、也更容易加监控和埋点。

  • encode() 必须强制设置 iatexpjti:前端传来的 payload 不可信,不能让它决定过期时间或伪造唯一 ID
  • decode() 必须用 new Key($secret, 'HS256') 构造,不是传字符串——^6.10 已废弃字符串密钥方式,否则抛 TypeError
  • 验证失败统一 throw InvalidArgumentException,中间件 catch 后直接返回 401,避免分散处理异常分支
  • 示例关键片段:
    public function encode(array $payload): string {<br>    $payload['iat'] = time();<br>    $payload['exp'] = time() + 3600;<br>    $payload['jti'] = bin2hex(random_bytes(16));<br>    return JWT::encode($payload, $this->secret, 'HS256');<br>}

中间件必须放行 OPTIONS 请求,否则跨域直接卡死

这是 TP 项目上线后最常被骂“为什么登录成功但接口 401”的原因——前端发预检请求(OPTIONS),中间件没判断方法就直接走鉴权,结果因 header 没 Authorization 而拦截。

Vondy
Vondy

下一代AI应用平台,汇集了一流的工具/应用程序

下载
  • 验证逻辑开头必须加:if ($request->method() === 'OPTIONS') return $next($request);
  • 提取 token 只认 Authorization: Bearer xxx,不解析 query 或 cookie;别写成 $request->header('authorization')(小写 key 在某些 SAPI 下取不到)
  • 别在路由分组里全局绑定中间件,优先在需要鉴权的控制器方法上单独注解 @middleware('checkJwt'),避免误伤开放接口

别碰 thans/tp-jwt-authzewail/think-api 这类扩展

它们看似省事,实则隐藏大量陷阱:前者生成的 .env 文件把密钥明文落盘,后者默认用 deviation => 60 却不校验 iat,导致时间不同步的设备反复验签失败;更关键的是,两者都未适配 TP8 的容器自动注入机制,$this->app->make(JwtService::class) 会报找不到绑定。

  • thans/tp-jwt-authphp think jwt:create 命令本质只是复制模板,没做任何密钥安全检查,JWT_SECRET=abc123 这种弱密钥照单全收
  • zewail/think-apiJWT::attempt() 内部仍调用 lcobucci/jwt,而该库早在 2023 年就停止对 PHP 7.x 的安全更新
  • 所有“一键生成 token”的封装,基本都忽略 jti 防重放,也没提供刷新机制——真要 token 刷新,自己写 refresh() 方法比依赖插件更可靠
事情说清了就结束。JWT 本身不复杂,复杂的是怎么把它嵌进 TP 的生命周期里还不翻车——核心就三点:用对版本、密钥不落地、预检不拦截。其他都是枝节。

热门AI工具

更多
DeepSeek
DeepSeek

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

豆包大模型
豆包大模型

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

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

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

文心一言
文心一言

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

讯飞写作
讯飞写作

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

即梦AI
即梦AI

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

ChatGPT
ChatGPT

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

相关专题

更多
composer是什么插件
composer是什么插件

Composer是一个PHP的依赖管理工具,它可以帮助开发者在PHP项目中管理和安装依赖的库文件。Composer通过一个中央化的存储库来管理所有的依赖库文件,这个存储库包含了各种可用的依赖库的信息和版本信息。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

162

2023.12.25

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

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

184

2024.05.11

Golang 中间件开发与微服务架构
Golang 中间件开发与微服务架构

本专题系统讲解 Golang 在微服务架构中的中间件开发,包括日志处理、限流与熔断、认证与授权、服务监控、API 网关设计等常见中间件功能的实现。通过实战项目,帮助开发者理解如何使用 Go 编写高效、可扩展的中间件组件,并在微服务环境中进行灵活部署与管理。

226

2025.12.18

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

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

385

2024.04.10

thinkphp性能怎么样
thinkphp性能怎么样

thinkphp 是一款高性能的 php 框架,具备缓存机制、代码优化、并行处理和数据库优化等优势。官方性能测试显示,它每秒可处理超过 10,000 个请求,实际应用中被广泛用于京东商城、携程网等大型网站和企业系统。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

358

2024.04.10

string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

1051

2023.08.02

if什么意思
if什么意思

if的意思是“如果”的条件。它是一个用于引导条件语句的关键词,用于根据特定条件的真假情况来执行不同的代码块。本专题提供if什么意思的相关文章,供大家免费阅读。

847

2023.08.22

require的用法
require的用法

require的用法有引入模块、导入类或方法、执行特定任务。想了解更多require的相关内容,可以阅读本专题下面的文章。

510

2023.11.27

TypeScript类型系统进阶与大型前端项目实践
TypeScript类型系统进阶与大型前端项目实践

本专题围绕 TypeScript 在大型前端项目中的应用展开,深入讲解类型系统设计与工程化开发方法。内容包括泛型与高级类型、类型推断机制、声明文件编写、模块化结构设计以及代码规范管理。通过真实项目案例分析,帮助开发者构建类型安全、结构清晰、易维护的前端工程体系,提高团队协作效率与代码质量。

26

2026.03.13

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
第二十四期_PHP8编程
第二十四期_PHP8编程

共86课时 | 3.5万人学习

成为PHP架构师-自制PHP框架
成为PHP架构师-自制PHP框架

共28课时 | 2.6万人学习

第二十三期_PHP编程
第二十三期_PHP编程

共93课时 | 7.5万人学习

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

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