webman本身不内置jwt支持,推荐使用webman/plugin-jwt插件替代手写逻辑,它轻量安全、自动拦截未授权请求、支持双通道鉴权及http-only cookie;需配置32字节以上强密钥、启用exp/nbf/iss等标准校验,严禁硬编码或弱值。

Webman 本身不内置 JWT 支持,直接手写 firebase/php-jwt 的 JWT::encode() 和 JWT::decode() 是可行的,但极易漏掉 exp、nbf、iss 等关键校验,也难统一拦截未授权请求。生产环境应优先使用插件方案,而非裸库封装。
webman/plugin-jwt 插件配置与密钥安全要点
这是官方生态兼容性最好、侵入最小的 JWT 方案,自动注入中间件、统一返回 401 响应,且支持双通道(Header + Cookie)扩展。
- 执行
composer require webman/plugin-jwt安装,不要手动 requirefirebase/php-jwt - 密钥必须通过
.env注入,严禁硬编码或弱值(如md5('123')、123456);建议用 OpenSSL 生成 32 字节以上随机串:openssl rand -hex 32 - 在
config/plugin/webman/plugin-jwt/app.php中配置:'secret' => $_ENV['JWT_SECRET'] ?? 'your_32_byte_strong_secret_here' - HS256 是默认算法,无需额外设
algorithm;若改用 RSA,需同时提供 PEM 格式私钥/公钥并显式指定'algorithm' => 'RS256'
登录接口返回 token 时必须带 HTTP-only Cookie
很多开发者只返回 JSON 中的 token 字段,让前端存 localStorage —— 这是 XSS 高危操作。Webman 虽为长连接模型,但 JWT 仍应遵循 Web 安全最佳实践。
- 登录成功后,调用
jwt()->encode()生成 token,例如:$token = jwt()->encode(['user_id' => $user['id'], 'exp' => time() + 3600]) - 手动设置 HTTP-only Cookie:
response()->withCookie('token', $token, 3600, '/', '', true, true, false, 'Strict') - 响应体仍需返回
json(['token' => $token]),供移动端或调试工具使用 - 若前端是 Vue/React 单页应用且跨域,必须在 Axios/Fetch 中加
credentials: 'include',后端CORS中开启凭据支持
支持双通道鉴权:Header 和 Cookie 同时校验
插件默认只读 Authorization: Bearer xxx,不读 Cookie。要让 Web 页面走 Cookie、API 调用走 Header,得自定义中间件。
- 新建中间件类,继承
Plugin\Jwt\Middleware\JwtAuth - 重写
getToken()方法:优先从$request->header('authorization')取,为空则 fallback 到$request->cookie('token') - 注意 Cookie 值需手动 trim() 并去除
Bearer前缀(Header 值同理),否则JWT::decode()会报Invalid token format - 不要在中间件里重复解析 token —— 插件已缓存到
$request->attr('jwt_user'),直接取用即可
为什么不能跳过 exp/nbf/iss 校验?
裸用 JWT::decode() 时若没传 new Key($secret, 'HS256') 或没设 validate 参数,会跳过所有标准声明检查。后果很实际:
-
exp缺失 → 过期 token 仍能访问敏感接口 -
nbf缺失 → 攻击者可重放旧 token,在生效时间前提前使用 -
iss缺失 → 无法识别 token 是否由本系统签发,第三方伪造风险上升 - 插件方案默认启用全部标准校验;手写时必须显式传入
['iss' => 'your-api.com', 'nbf' => time(), 'exp' => time() + 3600]到JWT::decode()的第三个参数
最常被忽略的是:插件虽自动校验,但 exp 时间单位是秒,而 Redis 黑名单或刷新逻辑中若误用毫秒,会导致 token 提前失效或长期滞留黑名单。所有时间戳务必统一用 time(),别混用 microtime(true)。
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!











