4.5. 登录 API 获取 JWT 令牌

本教程最新版为 9.x,当前版本已放弃维护,请阅读最新版本!

JWT

JWT 是 JSON Web Token 的缩写,是一个非常轻巧的规范,这个规范允许我们使用 JWT 在用户和服务器之间传递安全可靠的信息。

JWT 由头部(header)、载荷(payload)与签名(signature)组成,一个 JWT 类似下面这样:

{
    "typ":"JWT",
    "alg":"HS256"
}
{
    "iss":"http://larabbs.test",
    "iat":1515733500,
    "exp":1515737100,
    "nbf":1515733500,
    "jti":"c3U4VevxG2ZA1qhT",
    "sub":1,
    "prv":"23bd5c8949f600adb39e701c400872db7a5976f7"
}
signature
  • 头部申明了加密算法;
  • 载荷中有两个比较重要的数据,exp 是过期时间,sub 是 JWT 的主体,这里就是用户的 id;
  • 最后的 signature 是由服务器进行的签名,保证了 token 不被篡改。

JWT 最后是通过 Base64 编码的,也就是说,它可以被翻译回原来的样子来的。所以不要在 JWT 中存放一些敏感信息。

用户 id,过期时间等数据都保存在 Token...

本文章首发在 LearnKu.com 网站上。

为了保证课程的高品质,我们需要对课程进行收费。付费后 才能观看剩余内容。 购买

上一篇 下一篇
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
贡献者:4
讨论数量: 110

jehaz007
jwt 刷新 token 具体方案,见答案
17 个点赞 | 32 个回复 | 问答 | 课程版本 5.5
holashatu
Auth::guard ('API')->attempt ($credentials)) 到底是什么?
9 个点赞 | 11 个回复 | 问答 | 课程版本 5.5
wangjiu
刷新 token 之后,旧的 token 会立即失效,应该如何解决?
3 个点赞 | 17 个回复 | 问答 | 课程版本 5.5
arfurs
dingo/API 的 api.auth 中间件对于不同用户表认证问题
3 个点赞 | 6 个回复 | 问答 | 课程版本 5.5
wangjiu
$this->response 是什么意思?
2 个点赞 | 10 个回复 | 问答 | 课程版本 5.5
qujsh
jwt 刷新过期了的问题
2 个点赞 | 8 个回复 | 问答 | 课程版本 5.7
AmberLavigne
JWT 如何被恶意劫持了怎么办?会出现这种情况吗?
2 个点赞 | 8 个回复 | 问答 | 课程版本 5.5
tooyond
我觉得把 Token 放在 Header 里更好一些
2 个点赞 | 7 个回复 | 分享 | 课程版本 5.5
szlwl01
token 原理是什么?
2 个点赞 | 2 个回复 | 问答 | 课程版本 5.5
Cwift
Laravel 5.7 安装 JWT 失败?
2 个点赞 | 2 个回复 | 问答 | 课程版本 5.5
易水
请问为什么.env 的配置过期时间无效,一直是 60 分钟?
1 个点赞 | 7 个回复 | 问答 | 课程版本 5.5
hehorange
JWT 跟 token 的区别?
1 个点赞 | 6 个回复 | 问答 | 课程版本 5.5
Wen369367988
jwt token 有效期
1 个点赞 | 5 个回复 | 问答 | 课程版本 5.5
北极冰
请问 token 的验证原理是什么呢?
1 个点赞 | 5 个回复 | 问答 | 课程版本 5.5
MaNiu
我在这节课里已经饶了一周了,求老师指点
1 个点赞 | 4 个回复 | 问答 | 课程版本 6.x
HugBoomsj
API 接口安全,防止抓包如何处理?
1 个点赞 | 4 个回复 | 问答 | 课程版本 5.5
遗忘的时光
结尾多一个分号?
1 个点赞 | 4 个回复 | 问答 | 课程版本 5.5
Rainbow9502
关于认证中间件指定配置为 API 而非 Web 的问题?
1 个点赞 | 3 个回复 | 问答 | 课程版本 5.5
working
关于PHP-Open-Source-Saver/jwt-auth的问题
1 个点赞 | 2 个回复 | 问答 | 课程版本 9.x
采用手机验证码,无密码登录的问题
1 个点赞 | 1 个回复 | 问答 | 课程版本 5.8
Narcissus
phpstorm dingo/API 没有代码提示
1 个点赞 | 1 个回复 | 问答 | 课程版本 5.5
hustnzj
请问 api.auth 这个中间件在哪里使用了?
1 个点赞 | 1 个回复 | 问答 | 课程版本 5.5
悲剧不上演
教程中换取 Token 的方式与 OAuth2.0 不一样?
1 个点赞 | 1 个回复 | 问答 | 课程版本 5.5
williamQian
这种方式可以替代 Laravel 自带的 auth 用户认证么?
1 个点赞 | 1 个回复 | 问答 | 课程版本 5.5
zhangpipi
JWT 这种验证机制的安全性有多强?
1 个点赞 | 1 个回复 | 问答 | 课程版本 5.5
zssen
unique 规则不生效,其他的验证规则生效是什么问题?
0 个点赞 | 14 个回复 | 问答 | 课程版本 5.5
Aiden
laravel8使用jwt 登录成功返回的token 为true求解答
0 个点赞 | 8 个回复 | 问答 | 课程版本 8.x
logic
tinker 验证错误
0 个点赞 | 8 个回复 | 问答 | 课程版本 5.5
江渚之上
刷新和删除 token 报错?
0 个点赞 | 8 个回复 | 问答 | 课程版本 5.5
__K7__
密码验证用教程的一直验证不过
0 个点赞 | 7 个回复 | 问答 | 课程版本 5.5
Innocence6
Token Signature could not be verified?
0 个点赞 | 7 个回复 | 问答 | 课程版本 5.5
zhou0818
jwt-auth 如何设置,获取刷新 token 的过期时间?
0 个点赞 | 7 个回复 | 问答 | 课程版本 5.5
mingzheng
安装jwt-auth失败,提示版本冲突
0 个点赞 | 6 个回复 | 问答 | 课程版本 8.x
Mr0451
关于 jwt 刷新的疑惑
0 个点赞 | 5 个回复 | 问答 | 课程版本 5.5
战狼1991
手机登录提示 “用户名或密码错误”
0 个点赞 | 4 个回复 | 问答 | 课程版本 6.x
gyp719
token 生成失败,哪位大佬知道
0 个点赞 | 4 个回复 | 问答 | 课程版本 5.8
W-W
Laravel5.8 安装 JWT-auth 失败?
0 个点赞 | 4 个回复 | 问答 | 课程版本 5.7
walt-white
刷新 token 提示令牌已被列入黑名单列表
0 个点赞 | 4 个回复 | 问答 | 课程版本 5.7
logic
The payload is invalid?
0 个点赞 | 4 个回复 | 问答 | 课程版本 5.5
wangjiu
刷新 token 方法无法返回 Auth::guard ('API')->user () 当前用户吗?
0 个点赞 | 4 个回复 | 问答 | 课程版本 5.5
lafans
auth('api')->factory()->getTTL() * 60
0 个点赞 | 3 个回复 | 问答 | 课程版本 7.x
MaNiu
老师,求问下这节中提到的 dingoApi 和 fromUser 在哪用到了?
0 个点赞 | 3 个回复 | 问答 | 课程版本 6.x
wangxi
关于刷新 token 的问题
0 个点赞 | 3 个回复 | 问答 | 课程版本 6.x
ATYW
请教一下大家,服务端调用服务端 API 问题
0 个点赞 | 3 个回复 | 问答 | 课程版本 5.8
Narcissus
不明白 token_type 等于 Bearer 的作用
0 个点赞 | 3 个回复 | 问答 | 课程版本 5.5
阿伦
Auth 与 auth () 的区别?
0 个点赞 | 3 个回复 | 问答 | 课程版本 5.5
AllenBool
第三方登录修改后,操作 刷新 token 一直出现 500 报错?
0 个点赞 | 3 个回复 | 问答 | 课程版本 5.5
Ciroy
jwt 是否安全? 这个不是可以直接被解析出来么?
0 个点赞 | 3 个回复 | 问答 | 课程版本 5.5
czy2020
有人遇到这个问吗?
0 个点赞 | 3 个回复 | 问答 | 课程版本 5.5
xolee
删除 token 操作后,postman 提示 Could not get any response?
0 个点赞 | 3 个回复 | 问答 | 课程版本 5.5
Daemon
在 config/api.php,auth 中增加 JWT 相关的配置,作用是什么呢?
0 个点赞 | 3 个回复 | 问答 | 课程版本 5.5
Kerr
安装 jwt-auth 出错,显示 PHP 的内存不足错误
0 个点赞 | 2 个回复 | 问答 | 课程版本 6.x
bing_
如何获取 Bearer {token} ?
0 个点赞 | 2 个回复 | 分享 | 课程版本 5.8
Soner
关于 use Auth 到底是引入的哪个?
0 个点赞 | 2 个回复 | 问答 | 课程版本 5.7
Sher
多个字段登录怎么解决,比如 email、phone、name 等
0 个点赞 | 2 个回复 | 问答 | 课程版本 5.5
jaminchen
jwt 服务端真的不要保存么?
0 个点赞 | 2 个回复 | 问答 | 课程版本 5.7
阿伦
为什么教程和 JWT 的文档不一样?
0 个点赞 | 2 个回复 | 问答 | 课程版本 5.5
Zhangzhuow
用户可以多设备登录?
0 个点赞 | 2 个回复 | 问答 | 课程版本 5.5
xuecong
为什么登录完成后不直接返回用户个人信息?
0 个点赞 | 2 个回复 | 问答 | 课程版本 5.5
hanghang
设置 token 的过期日期为永久,报错?
0 个点赞 | 2 个回复 | 问答 | 课程版本 5.5
Pepsi丶
请问有人遇到过这个问题吗?
0 个点赞 | 2 个回复 | 问答 | 课程版本 5.5
heart_5653
如何查看源码?
0 个点赞 | 2 个回复 | 问答 | 课程版本 5.5
HugBoomsj
求助 Token has expired?
0 个点赞 | 2 个回复 | 问答 | 课程版本 5.5
Yang
过期时间为什么要设置成 TTL * 60 ?
0 个点赞 | 2 个回复 | 问答 | 课程版本 5.5
tommysong666
大家有没有遇到这个问题,是我少了哪个步骤吗?
0 个点赞 | 1 个回复 | 问答 | 课程版本 7.x
zjnn
如果我想修改JWT使用的users表 改为其他用户表可以吗?
0 个点赞 | 1 个回复 | 问答 | 课程版本 7.x
王子飞
如果普通表单登录后,又要调用api接口,如何获取JWT token
0 个点赞 | 1 个回复 | 问答 | 课程版本 7.x
夜带水果刀
4.5. 登录 API 获取 JWT 令牌:"Undefined variable: token",
0 个点赞 | 1 个回复 | 分享 | 课程版本 7.x
wonderfate
登录时,账号未注册返回 HTTP 状态码 422 是否合适
0 个点赞 | 1 个回复 | 问答 | 课程版本 6.x
战狼1991
登录提示 “用户名或密码错误”
0 个点赞 | 1 个回复 | 分享 | 课程版本 6.x
wongvio
无法生成 token 是为什么
0 个点赞 | 1 个回复 | 问答 | 课程版本 6.x
wali
刷新 Token 返回 400 错误
0 个点赞 | 1 个回复 | 问答 | 课程版本 5.8
JHWu
对于 guards 问题,DingoApi 如何切换不同 guards
0 个点赞 | 1 个回复 | 问答 | 课程版本 5.5
xingxiaoli
$credentials 数组的值可以自己随意添加吗?
0 个点赞 | 1 个回复 | 问答 | 课程版本 5.8
xingxiaoli
退出登录就是销毁 token 吗?
0 个点赞 | 1 个回复 | 问答 | 课程版本 5.7
xingxiaoli
token 不需要保存吗?
0 个点赞 | 1 个回复 | 问答 | 课程版本 5.7
yufatang
关于 bear basic
0 个点赞 | 1 个回复 | 问答 | 课程版本 5.5
CaiBird008
JWTAuth::parseToken ( )->方法名 与 \Auth::guard ( 'API' )->方法名
0 个点赞 | 1 个回复 | 问答 | 课程版本 5.7
taowendi
生成 token 报错
0 个点赞 | 1 个回复 | 问答 | 课程版本 5.7
Innocence6
刷新 token 报 405?
0 个点赞 | 1 个回复 | 问答 | 课程版本 5.5
xuecong
刷新 token 和删除 token 路由是不是应该添加 api.auth 中间件?
0 个点赞 | 1 个回复 | 问答 | 课程版本 5.5
Luff
用户能互踢吗?
0 个点赞 | 1 个回复 | 问答 | 课程版本 5.5
MIYA28118
5.6.21 安装 JWT 报错了?
0 个点赞 | 1 个回复 | 问答 | 课程版本 5.5
sainmu
这篇贴出来的代码没有判断 openid 和 unionid,忘修正?
0 个点赞 | 1 个回复 | 问答 | 课程版本 5.5
wanyi
jwt-auth安装时的版本问题
0 个点赞 | 0 个回复 | 分享 | 课程版本 8.x
xiaoqiang1994
发送过期的token来执行删除方法会出错
0 个点赞 | 0 个回复 | 问答 | 课程版本 6.x
captainwong
Laraval8 + PHP8 需要安装 1.0.x-dev
0 个点赞 | 0 个回复 | 分享 | 课程版本 8.x
酱汁儿
关于不建议在注册日期声明中使用整数的解决办法
0 个点赞 | 0 个回复 | 分享 | 课程版本 8.x
pee2bee
生成的token,直接复制到postman报错
0 个点赞 | 0 个回复 | 分享 | 课程版本 6.x
phpervip
第三遍了,还是看不懂
0 个点赞 | 0 个回复 | 分享 | 课程版本 6.x
nielz
刷新 token,报 400 错误,怎么解决?
0 个点赞 | 0 个回复 | 问答 | 课程版本 6.x
zjnn
删除 token destroy 返回报错
0 个点赞 | 0 个回复 | 问答 | 课程版本 6.x
Jeffid
刷新和删除方法中 Auth 类使用时注意
0 个点赞 | 0 个回复 | 分享 | 课程版本 5.7